我创建了一个简短的算法来检查数组中的值,如果找不到值,则输出找不到值。
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}}?
答案 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
int index =10;
int out =0;
::loop condition( out< index)
{
if(out == index)
System.out.println(out);
++out;
}
因此,在循环结束时,你的out值为10,它等于index