Это не имеет ничего общего с тем, как вы проходите емкость.Это больше связано с тем, сколько раз Scanner.nextInt
вызывается внутри цикла.
Поскольку всегда есть 5 входов, а первый вход всегда имеет размер, если вы делаете
Deque<Integer> deque = new ArrayDeque<>(sc.nextInt())
sc.nextInt
будет вызвано в общей сложности 5 раз (потому что у вас есть 5 входов), 4 раза внутри цикла и 1 раз в строке выше, и поэтому 4 числа будут добавлены в Deque.Это правильно.
Если вы сделали это, однако:
Deque<Integer> deque = new ArrayDeque<>(4)
sc.nextInt
будет вызываться 5 раз внутри цикла, и поэтому 5 номеров будут добавлены в Deque.Но первое число на самом деле не должно быть добавлено в Deque, потому что это размер, следовательно, выдает неправильный вывод.
ArrayDeque
изменяемого размера, поэтому вам не нужно указывать размер и вашкод все еще будет работать.
Вы можете проигнорировать первый ввод, вызвав sc.nextInt
перед циклом:
sc.nextInt();
while (sc.hasNextInt()) {
...