Всех приветствую
не могу понять зачем мы переменную int инициализировали как Ineger.MAX_VALUE, работа алгоритма понятна, зачем инициализировать min таким значение не понятно. Решил помощи попросить, 5 часов потратил, Так и не разобрался..
Прошу пожалуйста внятно и понятно объяснить. Спасибо!
Scanner scanner = new Scanner(System.in);
int max = Integer.MAX_VALUE;
int min = Integer.MAX_VALUE;
while (scanner.hasNextInt()) {
int number = scanner.nextInt();
if (number < max) {
min = max;
max = number;
} else if (number < min && number != max) {
min = number;
}
}
System.out.println(min);
}
}
Anton
2 уровень
Не понятно
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас ПасинковSoftware Developer в ZipyMaster
20 ноября 2023, 23:09решение
розглянемо пошук мінімума.
проблема в тому, що ми не знаємо заздалегідь які числа введе користувач.
ми можемо зробити отак int min = 0; і далі шось намагатися писати. але тут виникає проблема, шо якщо користувач вводитиме числа, які більші за 0 - то в результаті в нас в мінімумі все-одно буде 0, який користувач навіть і не вводив.
можемо ініціалізувати мінімум якимось більшим числом, наприклад 100. але знову ж таки, якщо користувач введе 200, 300 і 500 - то в нас мінімум покаже 100 (а користувач цього не вводив, в нього мінімум мав би бути 200).
йдемо далі, ініціалізуємо мінімум якимось реально великим числом, наприклад 100500. і знов маємо проблему шо якщо користувач введе 100501, 100502 і 100503 - то ми знов покажемо неправильний мінімум.
тому ми вирішили ініціалізувати наш мінімум максимально можливим цілим числом (ну майже). в такому разі, яке б інше число не ввів би користувач - воно завжди буде меншим за оце наше початкове, і таким чином, мінімум порахується правильно.
з максимумами все те-саме, тільки навпаки.
+4
Пра
21 ноября 2023, 05:47
Привет. Спасибо за очень понятный и внятный ответ. Но дело в том что я всё перепробовал, а программа всё-равно правильный ответ выводит, как бы странно не звучало
0
Стас ПасинковSoftware Developer в ZipyMaster
21 ноября 2023, 08:23
а ти хотів щоб вона неправильну відповідь тобі виводила б?) чи шо?
0
Anton
21 ноября 2023, 12:24
Нет, я имел ввиду что, я к примеру инициализировал min как 100, ввел 101 102 103, и мне вывелось по окончанию программы 102
0
Денис Enterprise Java Developer
21 ноября 2023, 15:36
Зачем? Это же даже логически бред :) Что за волшебные числа? Если уж делать преинициализацию левыми данными, то такими что гарантировано сменятся в ходе работы программы. А не такими, что нужен отдельный костыль для их правильной работы.
По большему счету никакой преинициализации и не нужно, можно просто считать два числа сразу и просетить ими переменные, ведь по условию задачи должно быть минимум два числа введено.
0
Михаил
20 ноября 2023, 21:10решение
Ты не туда думал. Любая задача имеет множество решений. Не обязательно это решение должно быть умным или производительным. Решение дать максимальное значение минимуму, это просто решение программиста. В данном решение минимуму можно дать любое значение. Единственный вариант когда мы увидим это число на экране, при неправильном использовании программы: после первого числа ввести нечисло.
Старайся увидеть и запомнить интересные решения других программистов, но сильно не упирайся. Надо кучу кода самому написать чтобы понять, в какой момент это говнокод но зато быстро написано и выдает результат :)
+4
Пра
21 ноября 2023, 05:49
Получается min можно присвоить любое значение? Спасибо за ответ.
0
Сергей
21 ноября 2023, 13:30
Минимуму можно присвоить максимальное значение и если в консоль вводится не число, выводить значение минимума(в данном случае максимума) в консоль.
0