变量在 Java 中未更新

Variable not updating in Java

提问人:Farenhyte 提问时间:4/8/2022 更新时间:4/8/2022 访问量:431

问:

我正在编写一个程序,用户在其中输入 n 个数字,程序找到输入数字的数字总和,然后打印数字总和最大的数字。 例如,n=3,输入的数字是 325、800、199,那么程序应该打印 199,因为 1+9+9 = 19,这是 800 和 325 中最大的。

'''

import java.util.Scanner;

public class maxi {
    public static void main(String[] args) {
        Scanner f = new Scanner(System.in);
        System.out.println("Enter n: ");
        int n = f.nextInt();
        int max = 0;
        int c = 0;
        for (int i=0; i<n; i++) {
            System.out.println("Enter a number: ");
            int a = f.nextInt();
            int e = 0;
            while (a>0) {
                int d = a%10;
                e += d;
                a = a/10;
            }
            if (e>c) {
                c = e;
                max = a;
            }
        }
        System.out.println(max);
    }
}

'''

我面临的问题是变量 max 没有更新。我尝试在 for 循环中打印 e(数字总和)和 c(最大数字总和),它们工作正常,c 正在按应有的方式更新。但 max 不是。

爪哇岛 变量 整数 java.util.scanner

评论


答:

1赞 Chaosfire 4/8/2022 #1

Max 正在更新。你有 ,但此时已经为零。此循环:max = a;a

while (a>0) {
  int d = a%10;
  e += d;
  a = a/10;
}

会一直循环,直到变为 0 或更小,这就是条件的意思。当达到时,唯一可能的值为零。顺便说一句,学习使用调试器,它是你的朋友。aa>0max = a;a

0赞 Tchorzyksen 4/8/2022 #2

意外的解决方案是由此行引起的

a = a/10;

在某个时候,它将产生零。这正是退出 while 循环的条件。所以你在循环和 a 等于 0 时退出,然后你将 max 赋值为 0。

我的建议是为变量提供更具描述性的名称,并尝试以一种或另一种方式调试它。

遵循类名的符号 - 根据符号的上部 CamelCase。

我重新设计了您的示例,这是许多可能的解决方案之一

public class Example {

  private static final Scanner scanner = new Scanner(System.in);

  public static void main(String[] args) {
    System.out.println("Enter n: ");
    int numberOfSamples = scanner.nextInt();
    int result = 0;
    int resultDigitSum = 0;
    for (int i = 0; i < numberOfSamples; i++) {
      System.out.println("Enter a number: ");
      int inputNumber = scanner.nextInt();
      int quotient = inputNumber;
      int digitSum = 0;
      do {
        digitSum += quotient % 10;
        quotient = quotient / 10;
      }while(quotient > 0);

      if (digitSum > resultDigitSum) {
        resultDigitSum = digitSum;
        result = inputNumber;
      }
    }
    System.out.println(result);
  }


}

请记住,最好验证输入整数是否为正数。