Java 后变量未更新

Variable not updating in Java

我正在编写一个程序,用户在其中输入 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 不是。

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

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

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

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

a = a/10;

在某些时候它会产生零。这正是退出 while 循环的条件。所以你出了while循环,a等于0,然后你给max赋值0.

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

遵循 class 名称的表示法 - 根据表示法采用大驼峰命名法。

我修改了你的例子,这是许多可能的解决方案之一

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);
  }


}

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