2017-02-09 92 views
0

我有一個長度爲3的數組,因此索引0,1和2.然後我有一個計數器(int c)和一個翻轉限制(int rollover = array.length)和兩個按鈕,以偵聽它們何時點擊將決定進行一個或返回一個。當你在索引0如何將數字減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]); 

      } 


     } 

    }); 

「下一步」按鈕的作品,但我的「上一頁」按鈕,遇到一個錯誤,但同樣的工作,當你再次點擊它。基本上我有一個顯示寵物小精靈圖片的JLabel,當我點擊next或prev時,它會調用updateLabel方法來更改JLabel並顯示數組中的下一個或上一個pokemon。任何想法如何解決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」。事實上,'next'回調中的這段代碼'if(c == rollover)'永遠不會被擊中。在模運算中,0 <= mod(c)<翻轉。另外,你可以像'c =(c-1)%rollover'一樣執行'prev'類似於'next'的操作;'-1%rollover'將等於'rollover - 1'。 – mkasberg

+0

謝謝,這是它出界的問題 –

相關問題