Ваша функция last5 () неверна, потому что если у вас есть 6 чисел (или любое количество, не кратное 5) после того, как вы прочитали 5 чисел, вы начнете писать снова с позиции [0], причина
if (counter == 5) {
counter = 0
}
и я думаю, что это не то, что им требуется для функции.Если ваш поток 0, 1, 2, 3, 4, 5, 6, 7, -1 , ваша функция вернет 5, 6, 7, 3, 4 , но в моеммнение должно возвращаться 3, 4, 5, 6, 7
Мое решение для last5 () будет выглядеть примерно так:
public int[] last5() {
LinkedList<Integer> list = new LinkedList<>();
int[] toReturn = new int[5];
int quantity = 0;
int last;
last = read();
while (last != -1) {
list.add(last);
if (quantity >= 5)
list.pop();
else
quantity++;
last = read();
}
for (int i = 0; i < quantity; i++) {
toReturn[i] = list.get(i);
}
return toReturn;
}
}
Я использовал LinkedList длясохранить структуру данных очереди только с 5 элементами (или меньше).Вы также можете избежать LinkedList, но вам нужен дополнительный цикл while / for для перемещения на предыдущую позицию всех элементов после того, как вы прочитали 5 элементов.Таким образом, вы можете сохранить исходное положение элементов из потока.