2017-02-09 19 views
0

У меня есть массив длиной 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?

ответ

2

Я думаю, что это должно быть c = rollover-1; здесь:

 if(c!=0) { 
      c--; 
      updateLabel(pokemons[c]); 
     } else if(c==0) { 
      c = rollover-1; // <-- here 
      updateLabel(pokemons[c]); 
     } 
+0

Вот так. 'rollover == pokemons.length'. Максимальный индекс - 'pokemons.length - 1'. На самом деле этот бит кода 'if (c == rollover)' в обратном вызове 'next' никогда не попадает. В модульной арифметике 0 <= mod (c) <опрокидывание. Кроме того, вы могли бы реализовать 'prev' аналогично' next', делая что-то вроде 'c = (c-1)% rollover;' '' -1% rollover' будет равно 'rollover-1'. – mkasberg

+0

Спасибо, это была проблема, из-за которой он вышел из пределов –