协助for循环

时间:2015-10-28 13:25:21

标签: java loops

我创建了一个简短的算法来检查数组中的值,如果找不到值,则输出找不到值。

int [] array = {108, 10, 45, 67, 23, 29, 45, 48, 902, 2};
int in, out;
int index = 10;

for(out = 0; out < index; out++)
    if(array[out] == 200)
        break;
if(out == index)
    System.out.println("Coudld not find value");

它有效,因为我必须超出一个值以验证该值不在数组中,我意识到即使这个for循环输出0 - 9,它仍然适用于out == index(其中两者的值均为10)。我意识到for循环仍然会增加到终止循环的值,这是否有效?

然而,我尝试了这个并且我得到了一个数组越界错误。

for(out = 0; out < index; out++)
    if(out == index)
        System.out.println(out);

你能解释一下这是如何工作的/循环如何工作,如果10是终止循环的值,当循环在9 < index时,它仍然增加到10然后out = 10,{ {1}}?

3 个答案:

答案 0 :(得分:1)

 for(out = 0;out < index;out++)
       if(out == index)
          System.out.println(out);

因为你的数组大小为10而超出界限。这意味着它只有0到9的有效索引。在这种情况下,你的索引值是10,这导致越界。

尝试以下内容:

 int index = 9;
 for(int i = 0; i < array.Length; i++)
       if(i == index)
          System.out.println(array[i]);

这将确保在循环遍历数组时永远不会遇到OOB异常。

如果你想尝试在你的数组中找到一些东西:

 int toFind = 123;
 bool found = false;
 for(int i = 0; i < array.Length; i++)
 {
    if (array[i] == toFind)
    {
       found = true;
       break;
    }
 }
 if (found)
    sysout("Found");
 else
    sysout("Unable to find match");

答案 1 :(得分:1)

看来,你的问题在于,当你有一个带有条件的循环时,当循环正常结束时,即条件没有{false时,该条件将始终为break {1}}并且没有例外。

但这是循环的固有属性,因为只要条件为真,逻辑就会继续。因此,在条件转为false之前,循环不会退出。

因此,当条件为variable < limit且循环未被中断停止时,对于循环后的后续语句,variable >= limit必须为true(除了浮点{ {1}}š...)。如果NaN开始为variable <= limit,并且您在每次迭代中将变量最多增加一个,则可以在循环后依赖true,除非它已提前终止,即通过variable == limit。这是您的第一个代码示例。

循环体内,条件将始终为break,假设您不修改正文中的变量。如果您使用循环形式true,在正文的两次迭代执行之间,执行for(init; condition; update) body操作(增量),然后测试update。因此,由于对condition操作的评估,条件可能变为update,条件测试将失败并且循环结束。

最重要的是,循环后循环条件为false并不奇怪,它正是你所要求的,通过指定循环应该在条件为false时继续运行。< / p>

答案 2 :(得分:0)

您的for loop

的Psudocode如下所示
int index =10;
int out =0;
::loop condition( out< index)  
{
   if(out == index)
          System.out.println(out);  
   ++out;
}

因此,在循环结束时,你的out值为10,它等于index