为什么 for 循环中的 while 循环会进入无限循环?[已结束]

Why is while loop inside a for loop entering into an infinite loop? [closed]

提问人:Doulat Ghuman 提问时间:5/29/2023 更新时间:5/29/2023 访问量:79

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

6个月前关闭。

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 的阿姆斯特朗数。如果有人可以调试它并给我正确的代码,或者至少帮助我了解这里发生了什么。

Java for while 循环 循环

评论

0赞 MadProgrammer 5/29/2023
s = s/10;问自己一个问题 - 什么是 - 记住,只有整数 答案1/10
2赞 Corvus 5/29/2023
这是学习如何使用调试器的绝佳机会。

答:

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 子句现在应该可以正常工作。tempssif (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

我相信循环不会是无限的,因为会返回(请记住,它都是整数和整数)。whiles/1001/10 = 0

然而,循环将是无限的,因为每次你运行你设置的循环时,循环中的指令都会将其递增 1,因此最终会出现在循环的每次迭代中。forwhiles0fors1for

至于语句,它不会执行,因为在你的代码中,它会导致 ,因此在条件中,你最终会得到一个条件,该条件的计算结果始终为iftotal = total+(digit*digit*digit);digit = s % 101if1 == 0false