По заданию необходимо написать программу, которая:
1. считывает с консоли число N, которое должно быть больше 0
2. потом считывает N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.
Я решил попробовать сделать это через массив(да, еще не проходили. Спортивный интерес.). Т.Е. ввести с клавиатуры число N, пока оно больше 0 вводить с клавиатуры числа и наполнять ими массив. Но после ввода N и первого числа в массив программа заканчивает работу. Не могу разобраться, в чем дело.
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
int[] list = new int[N];
if(N > 0){
int numb = Integer.parseInt(reader.readLine());
for (int i = 0; i < N; i++)
{
list[i] = numb;
}
}
}
}
CilitBang
25 уровень
Помогите заполнить массив
Решен
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Игорь Backend Developer
4 сентября 2019, 09:14
if(N > 0)
if единичная сверка условия
while(N > 0) цикл, блок который будет выполняться, пока условие верно
0
hidden #598481
4 сентября 2019, 09:35решение
N это количество чисел, оно неизменно, цикл здесь не нужен. Условие, впрочем, тоже не нужно, т.к. есть цикл for от 0 до N
+2
hidden #598481
4 сентября 2019, 09:14решение
Посмотри, где у тебя считывается первое число в массив, и где у тебя цикл. Сделай выводы ;)
+2
CilitBang QA в КЕФИР!
4 сентября 2019, 10:00
Спасибо, получилось. Более того, условие с if действительно не нужно. Но я уперся в другую проблему. Как оказалось, в java нет метода, который достанет последний элемент из массива. Есть какие-то способы?
0
CilitBang QA в КЕФИР!
4 сентября 2019, 10:14
Первый вопрос актуален. Задачу я решил иначе, приделав Arrays.stream(list).max().getAsInt()
Но я бы хотел понять, как именно это работает.
0
hidden #598481
4 сентября 2019, 11:25
Если нет понимания, как заполнять массив, то стримы использовать рановато: для их понимания нужно знать более базовые вещи.
Задача требует нахождения максимального из элементов, это значит, что их надо сравнить между собой и вывести наибольшее. Я так понимаю, что последний элемент тебе понадобился, т.к. ты отсортировал массив.
С точки зрения трудозатрат это нерационально, т.к. временная сложность алгоритма поиска максимума линейная (O(n)), а у сортировки квадратичное время (O(n²)), т.е. на выполнение сортировки ты тратишь в среднем в N раз больше времени.
В любом случае, даже если ты решил делать это сортировкой, то, зная число N как количество элементов массива, к последнему элементу ты можешь обратиться как к list[N-1]
0
CilitBang QA в КЕФИР!
4 сентября 2019, 11:32
Действительно. Про Arrays.stream(list).max().getAsInt() уже прочитал. Даже что-то понял.
0
CilitBang QA в КЕФИР!
4 сентября 2019, 11:52
Я правильно понял, что массив и сортировка, или массив и Arrays.stream(list).max().getAsInt() по трудозатратам хуже и лучше использовать пару ifов и цикл?
0
hidden #598481
4 сентября 2019, 11:54
Предлагаю сделать тремя способами и сравнить :)
0
CilitBang QA в КЕФИР!
4 сентября 2019, 11:58
Да уже сделал, видимо пара ifов и цикл самый простой вариант. Просто почему-то кажется что использование массива и вот это вот все делает программу "красивой".
0
hidden #598481
4 сентября 2019, 12:13
сам по себе массив - это просто хранилище объектов. а вот получать максимальное значение из него можно разными сособами
0
CilitBang QA в КЕФИР!
4 сентября 2019, 12:17
Ну, я теперь знаю 2, но как оказалось, оба не очень)
0