【问题标题】:I don't understand this Java while loop我不明白这个 Java while 循环
【发布时间】:2020-11-06 08:18:43
【问题描述】:

我对这个 while 循环感到困惑。如果条件为 true 则重复;如果 false 则结束循环。对吗?

int a = in.nextInt();
int num;
int highestDigit = 0;

while (a > 0) {
    int digit = a % 10;
    if (digit > highestDigit) {
        highestDigit = digit;
    }
    a /= 10;
}

System.out.println(highestDigit);

但是,条件为真,因此它会一遍又一遍地打印最高数字。但是代码在找到最高位时停止。

输入:214 输出:4

【问题讨论】:

  • a /= 10 在循环中的每一圈发生,使a 变小直到为零;然后循环结束。
  • 是时候学习如何调试了
  • 'println' 在 while 循环之外。是什么让您认为它会打印不止一次?

标签: java while-loop


【解决方案1】:

使用像样的 Java IDE,例如Eclipse,使用它的调试器并单步执行程序,密切关注变量。

或者,为了更深入地了解这样的程序,拿一张长纸在你的大脑中模拟程序(当前指令加上该指令产生的变量值):

instruction                    a     highestDigit   digit   remark
-----------------------------------------------------------------------------
int a = in.nextInt();         214        -            -
int highestDigit = 0;         214        0            -
while (a > 0) {               214        0            -     is true: enter loop
int digit = a % 10;           214        0            4
if (digit > highestDigit) {   214        0            4     is true: enter block
highestDigit = digit;         214        4            4
a /= 10;                       21        4            4
while (a > 0) {                21        4            -     is true: enter loop
int digit = a % 10;            21        4            1

等等……

【讨论】:

    【解决方案2】:

    首先,你应该使用一个可以真正有希望的调试器,然后我改变了你的代码:

    import java.util.*;
    
    public class Main
    {
        public static void main(String[] args) {
            Scanner sc= new Scanner(System.in);
           int a = sc.nextInt();
            int num ;
            int highestDigit = 0;
    
            while (a > 0) {
                int digit = a % 10;
                if (digit > highestDigit) {
                    highestDigit = digit;
                }
                a /= 10;
                System.out.println("highestDigit is : " + highestDigit);
            }
    
            System.out.println(highestDigit);
            }
    }
    

    我想如果你运行我提到的代码,你就会得到答案。

    您没有一次又一次地看到highestDigit,因为您在while循环之后使用System.out.print,所以它只打印在for循环之后建立的highestDigit。

    【讨论】:

    • 我运行了你的代码,它只打印了三个“highestDigit is : 4highestDigit is : 4highestDigit is : 4” 为什么它只有三个?
    • 它取决于'int a',我的意思是它是动态的,它会随着你输入的输入而改变。
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 2015-03-25
    • 2016-10-27
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多