Я не понимаю этот цикл Java while

#java #while-loop

#java #во время цикла

Вопрос:

Я в замешательстве по поводу этого цикла while. Если условие истинно, то повторите; если 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

Комментарии:

1. a /= 10 происходит каждый ход цикла, a уменьшаясь до тех пор, пока он не станет равным нулю; затем цикл заканчивается.

2. Время научиться отлаживать

3. ‘println’ находится вне цикла while. Что заставляет вас думать, что он будет печатать что-либо более одного раза?

Ответ №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);
        }
}
  

Я думаю, что если вы запустите код, который я упомянул, вы получите свой ответ.

Вы не видели наивысшую цифру снова и снова, потому что вы используете System.out.print после цикла while, поэтому он просто печатает наивысшую цифру, которая основана после цикла for .

Комментарии:

1. Я запустил ваш код, и он напечатал только три из них: «Наивысшая цифра равна: 4 Наивысшая цифра равна: 4 Наивысшая цифра равна: 4» почему это только три?

2. Это зависит от ‘int a’, я имею в виду, что он динамический и будет меняться в зависимости от введенного вами ввода.