• ,

Максимальное и минимальное числа в массиве

Я далеко не новичок в программировании и задачи пока жутко легкие, но порой правильные решения не проходят.

Задача: Создать массив на 20 чисел. Заполнить его числами с клавиатуры. Найти максимальное и минимальное числа в массиве.
Вывести на экран максимальное и минимальное числа через пробел.


public static void main(String[] args) throws IOException
	{
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		final int size = 20;
		final int[] arr = new int[size];
		int maximum = Integer.MIN_VALUE;
		int minimum = Integer.MAX_VALUE;
		for(int i = 0; i < size; i++)
			arr[i] = Integer.parseInt(reader.readLine());

		for(int i : arr)
		{
			maximum = Math.max(maximum, i);
			minimum = Math.min(minimum, i);
		}

		System.out.print(maximum + " " + minimum);
	}


С чем связано отклонение задачи?

Ладно, думаю я, решил глянуть как же нужно было сделать и нашел, внимание решение :D

	public static void main(String[] args) throws IOException
	{
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

		int maximum = 0;
		int minimum = 0;

		int[] arr = new int[20]; //Напишите тут ваш код

		for(int i = 0; i < arr.length; i++)
		{
			arr[i] = Integer.parseInt(reader.readLine());

		}
		maximum = arr[0];
		minimum = arr[0];

		for(int i = 1; i < arr.length; i++)
		{

			if(arr[i] < minimum)
			{
				minimum = arr[i];
			}

		}

		for(int i = 1; i < arr.length; i++)
		{

			if(arr[i] > maximum)
			{
				maximum = arr[i];
			}

		}
		System.out.print(maximum);
		System.out.print(" ");
		System.out.print(minimum);
	}


UPD: Мой затуп, сори за невнимательность, не провел дебаг.

11 комментариев

balu1973
А отрицательные числа
karpenko1789
  • karpenko1789
  • 0
  • Комментарий отредактирован 2015-05-26 08:20:42 пользователем karpenko1789
Согласен с balu1973 … Все дело в строчках
int maximum = 0;
int minimum = 0;

В данном случае не учитываются отрицательные числа…
Именно поэтому в «говнокоде» используется:
int maximum = arr[0];
int minimum = arr[0]

=)
L2CCCP
Плохо что соглашаетесь :|


                        maximum = Math.max(maximum, i);
                        minimum = Math.min(minimum, i);


Класс математики учитывает все, если мин 0 а передаваемое число ниже нуля то будет возврат отрицательного.
+Вы думаю сами не поняли что написали, сори но это так.

Инициализация она и в Африке инициализация + эта ахинея лишняя.

                maximum = arr[0];
                minimum = arr[0];


Без этого бреда инициализатор цикла будет 0
L2CCCP
Вот Вам информация по вводу и результату


14
34523
675647
6758
345
-123
-234
-234923
4234
6
8
67
345345
234234
123
5453
756
978
12313
-12
675647 -234923
nicolas
  • nicolas
  • +1
  • Комментарий отредактирован 2015-05-26 09:04:32 пользователем nicolas
Вы не правы — если все введенные числа отрицательные у Вас максимум будет 0, что не верно.
Аналогично, если все числа >0 у Вас минимум будет 0.
karpenko1789
  • karpenko1789
  • +1
  • Комментарий отредактирован 2015-05-26 09:33:30 пользователем karpenko1789
Вы рассмотрите граничные случаи (все отрицательные и все положительные)…
Например, если ввести все 1, 1,..., 1 — то у вас будет результат 1 0!!!
А в случае -1,...,-1 — то у вас будет 0 -1!!!

Более того, если вы ратуете за компактный код, то просто укажите размер массива непосредственно при динамической инициализации (length и так по умолчанию final).
timurnav
  • timurnav
  • +3
  • Комментарий отредактирован 2015-05-26 09:46:08 пользователем timurnav
Самое интересное, что вот так, не поняв условий задачи или не переворошив в голове все возможные варианты исходных данных и конечных значений, многие ученики говорят, что сервис плох или валидатор кривой :) а ведь в 95% случаев всё дело в нас самих… впрочем оставшиеся 5% — это как раз те задачи, в которых я был в составе этих «многих учеников»
timurnav
  • timurnav
  • 0
  • Комментарий отредактирован 2015-05-26 10:02:17 пользователем timurnav
вот вам код в котором еще меньше букав
public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    int[] arr = new int[20];
    int maximum = Integer.MIN_VALUE;
    int minimum = Integer.MAX_VALUE;
    for(int i = 0; i < 20; i++) {
        arr[i] = Integer.parseInt(reader.readLine());
        maximum = Math.max(maximum, arr[i]);
        minimum = Math.min(minimum, arr[i]);
    }
    System.out.print(maximum + " " + minimum);
}

вместо reader можно писать r, а массив можно назвать a, букав будет еще меньше :) про minimum и maximum я вообще молчу)
Gwyn
Хотел сразу написать про ноли в коде ТС, но коллеги опередили.
к тому же задачка то не на Mаtch класс, а на способность к алгоритмам эти максимумы находить.
сортировку массива вообще можно в 1 строку сделать, но я в свое время так же как все не умничал, а выписывал сортировки пузырьком, придумывая свой велосипед.
Зато потом сколько было счастья, что реализация почти 1 в 1 совпала с православной…

Это не быдлокод — это задания начальных классов.
задачу вообще в 5 строк можно сделать, да только не в этом ее смысл.
timurnav
про Arrays.sort(), если ты о нем, true story
я аж прослезился когда понял, что пузырька своего больше не буду использовать)
вообще я был очень рад когда понял, что в библиотеке много чего интересного есть.
следующим открытием был метод shuffle(), в одной из задач он просто панацеей был :)
ну и после конечно же компараторы свели сложности сортировки на нет.
terranum
А говнокодик то рабочий оказался)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.