提问人:Farenhyte 提问时间:4/8/2022 更新时间:4/8/2022 访问量:431
变量在 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 不是。
答:
1赞
Chaosfire
4/8/2022
#1
Max 正在更新。你有 ,但此时已经为零。此循环:max = a;
a
while (a>0) {
int d = a%10;
e += d;
a = a/10;
}
会一直循环,直到变为 0 或更小,这就是条件的意思。当达到时,唯一可能的值为零。顺便说一句,学习使用调试器,它是你的朋友。a
a>0
max = 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);
}
}
请记住,最好验证输入整数是否为正数。
评论