2014-10-11 90 views
1

我不明白这段代码。我的一位朋友认为我使用布尔值来使其工作。我不明白他何时解释它。为什么循环中的foundFOR循环中的布尔值

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循环的i<z && !found部分是条件,为了循环继续,条件必须为真。添加!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

谢谢你这么多埃兰爵士!起初它真的让人困惑。不知道for循环中找到的目的是什么。你现在更清楚了。哈哈* weeeee *! – topacoBoy 2014-10-11 10:11:57

1

这里的“布尔”是用尽可能快的阵列中发现的输入的“ID”终止循环。好的是编译器不必搜索,直到找到最后一个索引为止的“id”。

0

里面的for循环的条件语句读取

i < z && !found 

当“发现”是真实的,for循环将停止循环。你可以阅读更多有关循环here

For循环语法如下:

for (initialize ; condition ; increment) {} 

也有可能取代你与while循环回路。

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