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);
}
}
请记住,验证输入整数是否为正数会很好。
我正在编写一个程序,用户在其中输入 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);
}
}
请记住,验证输入整数是否为正数会很好。