#java #max #minimum
Вопрос:
Я запустил этот код, все находит. maximumValue
показывает правильный вывод, однако minValue
в качестве вывода всегда отображается 0.
Scanner sc = new Scanner(System.in);
int x= sc.nextInt();
int[] day = new int[x];
int minValue = day[0];
int maxValue = day[0];
for (int i = 0; i < x; i ) {
day[i] = sc.nextInt();
if (day[i] < minValue) minValue = day[i];
if (day[i] > maxValue) maxValue = day[i];
}
System.out.println(minValue);
System.out.println(maxValue);
Ответ №1:
Почему это не работает
Вы читаете day[0]
, прежде чем присваивать ему какое-либо значение.
Ваш код
int[] day = new int[x];
int minValue = day[0];
int maxValue = day[0];
эквивалентно
int[] day = new int[x];
int minValue = 0;
int maxValue = 0;
Видишь https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5:
Каждый… компонент массива инициализируется значением по умолчанию при его создании.
Для типа int значение по умолчанию равно нулю, то есть 0.
Ваш код работает max
только случайно 🙂 Попробуйте ввести только отрицательные значения на вход, и вы max
также дадите только 0
.
Как это исправить
Настоятельно рекомендуется разделить вычислительную часть от ввода/вывода. Java не может легко возвращать два значения из метода. Вы можете реализовать два отдельных метода, для max
и min
отдельно, или вы можете вернуть два значения в специально созданном объекте кортежа.
Часть ввода/вывода:
final Scanner sc = new Scanner(System.in);
final int numberOfValues = sc.nextInt();
final int[] values = new int[numberOfValues];
for (int i = 0; i < numberOfValues; i ) {
values[i] = sc.nextInt();
}
System.out.println(minValue(values));
System.out.println(maxValue(values));
И вычислительная часть (посмотрите на цикл для каждого https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html):
public int minValue(int[] array) {
int min = Integer.MAX_VALUE;
for (int value : array) {
if (value < min) {
min = value;
}
}
}
Аналогично maxValue()
, теперь вы легко сделаете это самостоятельно.
Вашей программе все еще требуется некоторая обработка ошибок, например, когда пользователь вводит несогласованные данные.
У вас должна выработаться привычка разделять вычислительную и презентационную часть вашей программы с самого начала вашего носителя программирования 🙂 Вы создадите более удобные в обслуживании программы, а также гораздо быстрее увидите свои ошибки.
Комментарии:
1. Кроме того, вы можете
int minValue = Integer.MAX_VALUE
исправить поведение кода2. @Гюнтер …и
int maxValue = Integer.MIN_VALUE
🙂
Ответ №2:
Ты можешь сделать это вот так.
Scanner sc = new Scanner(System.in);
int x= sc.nextInt();
int[] day = new int[x];
for (int i = 0; i < x; i ) {
day[i] = sc.nextInt();
}
int minValue = day[0];
int maxValue = day[0];
for (int i = 0; i < x; i ) {
if (day[i] < minValue) minValue = day[i];
if (day[i] > maxValue) maxValue = day[i];
}
System.out.println(minValue);
System.out.println(maxValue);
Комментарии:
1. wahhhhhh приложение живет своей жизнью. everyoneeeeeee