gpt4 book ai didi

java - 为什么Java在break语句后不重置内循环的值?

转载 作者:行者123 更新时间:2023-12-01 19:36:21 24 4
gpt4 key购买 nike

我目前正在努力理解这个循环:

class Test{
public static void main(String args[]){
int i=0, j=0;
X1: for(i = 0; i < 3; i++){
X2: for(j = 3; j > 0; j--){
if(i < j) continue X1;
else break X2;
}
}
System.out.println(i+" "+j);
}
}

到目前为止我知道变量的值是:

 0 3 
1 3
2 3

最后将打印3 3

第三次迭代后,X1 上的条件将为 false,导致循环语句中断。虽然我很清楚为什么 i 的值等于3,我不明白为什么j的值也是3。最初 j 的值为 0 ,当我们进入循环时是 3 ,但在最后一次迭代中,我们并未真正输入 X2循环,因为 i<3评价为假。所以问题是编译器为什么“保存” k 的值?即使编译器保存 j 的值上一次迭代中的值应为 2 ...

最佳答案

j-- 在这里是死代码,永远不会被访问。想一下这里的代码是如何工作的:

X2: for(j = 3; j > 0; j--){
if(i < j) continue X1;
else break X2;
}

如果在一种情况下您继续外循环,在另一种情况下您会跳出此循环。这个循环实际上从来没有经过一次迭代,所以你不妨这样写:

int i=0, j=0;
X1: for(i = 0; i < 3; i++){
j = 3;
if(i < j) continue X1; //This line does nothing at this point as well since the loop will iterate anyway
}

这与您当前的代码完全相同,清楚地表明 j 将保留在 3

关于java - 为什么Java在break语句后不重置内循环的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57297312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com