2014-10-11 2 views
1

이 코드를 이해할 수 없습니다. 내 친구 중 한 명이 내가 부울을 사용하여 작동하도록 생각했습니다. 나는 그가 그것을 설명 할 때 정말로 이해하지 못한다. for 루프의 found은 왜 루프입니까?FOR 루프의 부울

int id = input.nextInt(); 
boolean found = false; 
for (int i = 0; i < z && !found; i++){ 
    if (arr[i].getId() == id){ 
     found = true; 
     index = i; 
    } 
} 

답변

0

for 루프의 일부는 조건이며, 루프가 계속 진행되어야합니다. !found 부분을 추가하면 found이 true이거나 i>=z 중 먼저 발생하는 경우 루프가 종료됩니다. 이 조건이 없으면 첫 번째 반복에서 일치 (예 : arr[i].getId()==id)가 발견 되더라도 루프는 항상 z 번 실행됩니다. 따라서이 조건은 루프의 실행 시간을 줄이는 최적화입니다.

!found 조건에 대한 대안

은 루프를 종료 할 break 키워드를 사용하고 있습니다 : 여기

  for(int i=0; i<z; i++){ 
       if(arr[i].getId()==id){ 
        found = true; 
        index = i; 
        break; 
       } 
      } 
+0

대단히 감사합니다. 그것은 처음에는 정말로 혼란 스러웠습니다. didnt는 for 루프에서 발견 된 목적이 무엇인지를 안다. 당신은 지금 그것을 더 분명하게했습니다. HAHA * weeeee *! – topacoBoy

1

"부울"을 빨리 배열에있는 입력 "ID"로 루프를 종료하기 위해 사용하고 있습니다. 좋은 점은 컴파일러가 마지막 색인 wheres "id"가 이미 발견 될 때까지 검색 할 필요가 없다는 것입니다.

0

루프에 대한 내부의 조건문은 루프 반복 중지,

i < z && !found 

사실이다 '발견'

를 읽습니다. 당신은 루프 구문을 보려면 here

은 다음과 같습니다 for 루프에 대한 자세한 내용을보실 수 있습니다 :

for (initialize ; condition ; increment) {} 

그것은 잠시 루프와 루프 당신을 대체 할 수도 있습니다.

int i = 0; 
int found = false; 
while(i < z && !found) { 
    if(arr[i].getId()==id){ 
     found = true; 
     index = i; 
    } 
} 

두 경우 모두 "break"키워드를 사용하여 조건부를 단순화 할 수 있습니다. break 키워드를 사용하면 루프가 종료됩니다. 즉시. 이것은 여기에 적합한 해결책 일 수도 있고 그렇지 않을 수도 있지만, 이러한 종류의 루프를 처리하는 다른 방법을 보여줍니다.

for(int i=0; i<z; i++){ 
    if(arr[i].getId()==id){ 
     index = i; 
     break; 
    } 
}