2011-08-16 5 views
47

몇 가지 오래된 회사 코드를 살펴보면 다음과 같은 for 루프가 나타났습니다.for 루프는 어떻게 작동합니까 (특히 (;;))?

for (;;) { 
    //Some stuff 
} 

Google을 시도했지만 답변을 찾을 수 없습니다. 프로그래밍 수업에서 잠들었나요? 아니면 이상한 루프입니까?

답변

70

자바에있는 for 루프는 다음과 같은 구조를 가지고 - 당신이 볼 수 있듯이, 여기에 네 개의 문이있다

for (initialization statement; condition check; update) 
    loop body; 

을 -

  1. 초기화 문 :이 문은 한 번 할 때 실행 루프가 처음 입력됩니다. 이 옵션은 선택 사항이며,이 필드를 비워 둘 수 있습니다. 일반적으로 초기화 목적으로 사용됩니다.
  2. 조건부 검사 :이 문이 가장 중요한 문 제입니다. 특정 표현식이 true로 평가되는지 여부를 확인합니다. 그럴 경우 루프 실행이 계속됩니다. 이 필드를 공백으로 유지하도록 선택하면 true으로 평가됩니다.
  3. 업데이트 :이 문 목록은 왼쪽에서 오른쪽으로 실행되며 일반적으로 일부 변수를 증가/감소시키는 데 사용됩니다.
  4. 루프 본문 : 조건부 검사의 진리 값에 따라 반복적으로 실행되는 루프의 본문입니다.

처음에는 루프가 처음 입력 될 때 초기화 문이 한 번 실행됩니다. 그런 다음 조건부 검사가 실행되어 참으로 평가되는지 확인합니다. 그럴 경우 루프 본문이 실행되고, 그렇지 않으면 루프 실행이 완료됩니다. 그 후 Update 문이 실행됩니다. 그런 다음 조건부 검사가 다시 실행되고 true로 평가되면 루프 본문이 다시 실행되고 업데이트 문이 실행 된 다음 다시 조건부 검사가 실행됩니다. 그러면 그림이 나타납니다.

이제 for(; ;) 구문에 대해 알려주세요. 초기화 문이 없으므로 아무 것도 실행되지 않습니다. 조건부 검사 문도 비어 있으므로 true로 평가됩니다. 그런 다음 루프 본문이 실행됩니다.그런 다음 update 문이 비어 있으므로 아무 것도 실행되지 않습니다. 그런 다음 다시 조건부 검사를 수행하여 다시 true로 평가 한 다음이 전체 프로세스가 다시 반복됩니다.

기본적으로 이것은 초기화 문이없는 무한 루프이며 조건부 검사는 항상 true로 평가되고 업데이트 문은 없습니다. 이것은 -

while(true) 
{ 
    ..... 
} 

과 비슷합니다. 이것은 java에서 많이 사용되는 루프 구조입니다.

이와 같이 무한 루프를 사용할 때 대부분의 경우 루프가 무기한 실행될 수 없으므로 브레이크 조건에주의하는 것이 중요합니다. 이러한 종류의 루프를 벗어나려면 break 문을 사용할 수 있습니다. 다음 구조는 -

if(some_condition_is_true) 
    break;  // This will cause execution to break out of its nearest loop 

또는

if(some_condition_is_false) 
    break; 
34

이것은 동일하다.

+0

Google에 알려졌지만 무한 루프를 사용하여, 나는 한 번 이상에 걸쳐 (사실) 잠시 유죄입니다. –

+2

그들이 유용하다고 생각하는 순간을 느낀다. – user489041

+4

최소한 (사실) 코드를 읽는 사람이 그것을 이해할 가능성이 더 높다고 생각하면 ... – PeterT

6

이 루프에는 보호 기능이없고 while (true) 루프의 역할을합니다. 휴식 시간까지 무한 루프됩니다.

+3

또는 반송! ... ~ –

+10

또는 스택 오버플로 –

+0

루프의 시작 부분으로 돌아갈 스택이 없으므로이 스택 오버플로를 상상할 수 없습니다. – Wes

2

무한 루프입니다. initialization, condition 및 increment 문은 모두 선택 사항이므로 아무 것도 사용하지 않으면 휴식 시간에 도달하거나 다른 구조가 상호 작용하지 않는 한 항상 반복됩니다.

나는 자바에 대해 확실 해요하지만

this question 방법을 설명에서 닷넷 귀하의 빈 forwhile (true) 정확히 같은 일에 컴파일됩니다. 자바가 잘한다면 놀라지 않을 것이다.

3

무한 루프입니다. 직관적이지 않기 때문에 정확히 코딩하지 않아도 실제로 컴파일되거나 런타임 오류가 발생하지 않습니다. while(true) { /* code */ }으로 다시 작성하면 무한 루프를 표시하는 데 훨씬 더 읽기 쉽습니다.

+0

코드 예에서 닫는 대괄호를 잊어 버린 경우 D –

+0

내 코드가 인라인 주석으로 인해 작성된 닫는 대괄호를 가져 오지 않는다고 당연 하겠지만 한 줄로 모두 가져 가고 싶었습니다. –

8

이들 모두 무한 루프이다

for(;;) { 
    // endlessly 
} 

while(true) { 
    // endlessly 
} 

do { 
    // endlessly 
} while(true); 
0

/* while 루프

5 달러

1 초콜릿 = 1 달러

while my money is greater than 1 bucks 
    select chocolate 
    pay 1 bucks to the shopkeeper 
    money = money - 1 
end 

집에 와서 내 돈 = 0 달러 */

#include<stdio.h> 
int main(){ 
    int money = 5; 

    while(money >= 1){ 
    printf("inside the shopk and selecting chocolate\n"); 
    printf("after selecting chocolate paying 1 bucks\n"); 
    money = money - 1 ; 
    printf("my remaining moeny = %d\n", money); 
    printf("\n\n"); 
    } 

    printf("dont have money cant go inside the shop, money = %d", money); 

    return 0; 
} 

무한 돈

while(codition){ // condition will always true ....infinite loop 
    statement(s) 
} 

이해 이 비디오를 확인할 수 있기 때문에 캔트 동안 가게에 가서 https://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s

관련 문제