У меня есть массив длиной 3, поэтому индексы 0,1 и 2. Тогда у меня есть счетчик (int c) и предел опрокидывания (int rollover = array.length) и две кнопки, которые прослушивают, когда они клик определит, идти вперед или вернуться назад.Как уменьшить число на 1 и когда он достигнет 0, возвращается к исходной точке?
prev.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(c!=0) {
c--;
updateLabel(pokemons[c]);
} else if(c==0) {
c = rollover;
updateLabel(pokemons[c]);
}
}
});
next.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
c = (c+1) % rollover; //increase c until the limit
if(c==rollover) {
updateLabel(pokemons[c]);
}
else if(c<rollover) {
updateLabel(pokemons[c]);
}
}
});
«следующая» кнопка работает, но моя кнопка «пред» обнаруживает ошибку, когда вы по индексу 0, но снова работает при нажатии на нее снова. В основном у меня есть JLabel, который показывает фотографии покемонов, и когда я нажимаю далее или предваряет его, вызывает метод updateLabel для изменения JLabel и показывает следующий или предыдущий покемон в массиве. Любые идеи о том, как исправить кнопку prev?
Вот так. 'rollover == pokemons.length'. Максимальный индекс - 'pokemons.length - 1'. На самом деле этот бит кода 'if (c == rollover)' в обратном вызове 'next' никогда не попадает. В модульной арифметике 0 <= mod (c) <опрокидывание. Кроме того, вы могли бы реализовать 'prev' аналогично' next', делая что-то вроде 'c = (c-1)% rollover;' '' -1% rollover' будет равно 'rollover-1'. – mkasberg
Спасибо, это была проблема, из-за которой он вышел из пределов –