2017-02-09 1 views
0

je un tableau avec une longueur de 3 donc index 0,1 et 2. Puis-je avoir un compteur (int c) et une limite de retournement (int capotage = array.length) et deux boutons qui écoutent quand ils sont cliquez pour déterminer d'aller de l'avant ou de revenir en arrière un.Comment diminuer le nombre de 1 et quand il frappe 0 revient au point de départ?

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]); 

      } 


     } 

    }); 

Les travaux bouton « suivant », mais mon bouton « prev » rencontre une erreur lorsque vous êtes à l'index 0, mais fonctionne à nouveau lorsque vous cliquez dessus à nouveau. Fondamentalement, j'ai un JLabel qui montre des images de pokemon et quand je clique sur next ou prev il appelle la méthode updateLabel pour changer le JLabel et montre le pokemon suivant ou précédent dans le tableau. Des idées sur la façon de réparer le bouton prev?

Répondre

2

Je pense qu'il devrait être c = rollover-1; ici:

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

Voilà. 'rollover == pokemons.length'. L'index maximum est 'pokemons.length - 1'. En fait, ce bit de code 'if (c == rollover)' dans le rappel 'next' ne sera jamais touché. En arithmétique modulaire, le 0 <= mod (c) mkasberg

+0

Merci, c'était le problème, il est sorti des limites –