#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’, я имею в виду, что он динамический и будет меняться в зависимости от введенного вами ввода.