2014-10-11 7 views
1

Я не понимаю этот код. Один из моих друзей подумал, что я использую логическое значение, чтобы заставить его работать. Я не понимаю, когда он это объясняет. Почему found в цикле for?Boolean in FOR loop

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

i<z && !found часть для цикла является условием, которое должно быть истинным для того, чтобы петля для продолжения. Добавление части !found означает, что цикл завершится, если значение found истинно или i>=z, в зависимости от того, что произойдет раньше. Без этого условия цикл всегда будет запускать z раз, даже если совпадение (то есть arr[i].getId()==id) находится на первой итерации. Поэтому это условие является оптимизацией, которая уменьшает время работы цикла.

Альтернативы условию !found использует break ключевое слово, чтобы завершить цикл:

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

Благодарю вас, сэр Эран! сначала это было странно. Не знал, какова была цель найденного в цикле for. Теперь вы поняли это. HAHA * weeeee *! – topacoBoy

1

Здесь «Boolean» используется для завершения цикла, как только введенного «ид», найденного в массиве. Хорошо, что компилятору не нужно искать до тех пор, пока не будет найден последний идентификатор «id».

0

Условный оператор внутри цикла для чтения

i < z && !found 

Когда «нашли» истинно, то цикл будет остановить цикл. Вы можете прочитать больше о для петель here

Для синтаксиса цикла выглядит следующим образом:

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; 
    } 
}