Я пишу программу, в которой пользователь вводит 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 не обновляется. Я попытался напечатать e (сумма цифр) и c (наибольшая сумма цифр) внутри цикла for, и они работают нормально, c обновляется, как и должно быть. Но Макс нет.
Макс. является обновляется. У вас есть 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.
Я предлагаю дать более описательные имена для переменных и попытаться отладить их так или иначе.
Следуйте обозначениям для имен классов - верхний 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);
}
}
Имейте в виду, было бы неплохо проверить, что входные целые числа положительны.