提问人:Doulat Ghuman 提问时间:5/29/2023 更新时间:5/29/2023 访问量:79
为什么 for 循环中的 while 循环会进入无限循环?[已结束]
Why is while loop inside a for loop entering into an infinite loop? [closed]
问:
While 循环进入无限循环。
for(int s=1; s<=500; s++)
{
//System.out.println(i);
int total=0;
while(s != 0) {
//System.out.println(s);
int digit = s % 10;
//System.out.println(digit+" "+s);
total = total+(digit*digit*digit);
//System.out.println(total);
//reversed = reversed*10 + digit;
s = s/10;
//System.out.println(s);
}
if (total==s) {
System.out.println(s);
}
}
当我尝试运行它时,它会进入一个无限循环,如果有人可以解释它,那么最后一个(如果永远不会被执行)。我正在尝试打印从 1 到 500 的阿姆斯特朗数。如果有人可以调试它并给我正确的代码,或者至少帮助我了解这里发生了什么。
答:
0赞
AztecCodes
5/29/2023
#1
您正在另一个循环中更改循环的变量。
这就是你得到无限循环的原因。在这里使用临时变量是有意义的。s
固定代码:
for (int s = 1; s <= 500; s++) {
int total = 0;
int temp = s; // Use temp variable
while (temp != 0) {
int digit = temp % 10;
total = total + (digit * digit * digit);
temp = temp / 10;
}
if (total == s) {
System.out.println(s);
}
}
在此示例中,代码是保存循环的每次迭代的值。现在,它每次都除以 10 倍,保持不变。if 子句现在应该可以正常工作。temp
s
s
if (total == s)
0赞
rotabor
5/29/2023
#2
不应更改循环变量 s:s=s/10。请改用临时变量:
for(int s=1; s<=500; s++)
{
//System.out.println(i);
int total=0; int q = s;
while(q != 0) {
//System.out.println(s);
int digit = q % 10;
//System.out.println(digit+" "+q);
total = total+(digit*digit*digit);
//System.out.println(total);
//reversed = reversed*10 + digit;
q = q/10;
//System.out.println(s);
}
if (total==s) {
System.out.println(s);
}
}
0赞
Nick
5/29/2023
#3
我相信循环不会是无限的,因为会返回(请记住,它都是整数和整数)。while
s/10
0
1/10 = 0
然而,循环将是无限的,因为每次你运行你设置的循环时,循环中的指令都会将其递增 1,因此最终会出现在循环的每次迭代中。for
while
s
0
for
s
1
for
至于语句,它不会执行,因为在你的代码中,它会导致 ,因此在条件中,你最终会得到一个条件,该条件的计算结果始终为if
total = total+(digit*digit*digit);
digit = s % 10
1
if
1 == 0
false
评论
s = s/10;
问自己一个问题 - 什么是 - 记住,只有整数 答案1/10