У меня возникла проблема с командным шаблоном с функцией отмены/повтора. Простая проблема в том, что когда моя история заполнена, я хочу удалить последнюю историю из истории и добавить новую в execute.Изменение истории в командном шаблоне с отменой/повторением?
Я получил этот фрагмент кода из моего профессора:
public class CommandHistory implements CommandInterface{
private static final int MAX_COMMANDS = 2;
private Command[] history = new Command[MAX_COMMANDS];
private int current = -1;
@Override
public void execute(Command command) {
current++;
if (current == MAX_COMMANDS){ // if full, then shift
for (int i = 0; i < MAX_COMMANDS - 1; i++){
history[i] = history[i+1];
}
}
history[current] = command;
history[current].execute();
}
В самом деле сомневаюсь, что если-п является неправильным, так как текущий индекс команды остается 2 и только команда с индексом 0 сдвигается на 1. Но он говорит, что это путь. Что мне не хватает?
Благодарим за быстрый ответ. Это звучит разумнее, но разве мне не нужно сбросить счетчик текущих событий? Если мы скажем, что мы прошли цикл с током = 2, не будут ли следующие циклы всегда вызывать историю [0] = историю [1] и историю [1] = историю [2], как раньше, поэтому история индекса [0] никогда не используется? – Blixxen
@Blixxen: Нет. При сохранении первой команды 'current' равен' -1', тест является ложным, и вы выполняете 'current ++', чтобы сделать его' 0' и сохраните там команду. При сохранении следующего, 'current' является' 0', тест является ложным, вы выполняете 'current ++', чтобы сделать его' 1', и вы храните там команду. При сохранении следующего, 'current' равен' 1', поэтому тест ** true **, и вы выполняете 'history [0] = history [1]' в цикле (который выполняется только один раз), а затем сохраняйте новый команда на 'current', которая по-прежнему' 1'. –
Мой плохой. Спасибо, сэр! – Blixxen