2014-04-10 40 views
-1

這4個if語句在此KeyListener中檢查輸入了哪個箭頭鍵。我想通過將4個if語句組合成更簡潔的switch語句或條件語句來提高效率。將if語句合併到1 switch語句中

如何將4條if語句合併爲1條件語句或switch語句?

class MyKeyListener implements KeyListener { 

    public void keyReleased(KeyEvent e) { } 

    public void keyTyped(KeyEvent e) {} 


    public void keyPressed(KeyEvent e) { 

     int keyCode = e.getKeyCode(); 



     for (int i=0; i < a.length;i++){ 
      for (int k=0; k < a[i].length;k++){ 
       Contents tileLeft = lr.getTile(levelData, i-1, k); 
       Contents tileUp = lr.getTile(levelDate, i, k+1); 
       Contents tileRight = lr.getTile(levelDate, i+1, k); 
       Contents tileDown = lr.getTile(levelData, i, k-1); 


       if(keyCode == KeyEvent.VK_LEFT) {  

        if (tileLeft == Contents.EMPTY || tileLeft == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i-1][k] = Contents.PLAYER;        
        } 
       } 

       if(keyCode == KeyEvent.VK_UP) { 


        if (tileUp == Contents.EMPTY || tileUp == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i][k+1] = Contents.PLAYER;        
        } 
       } 

       if(keyCode == KeyEvent.VK_RIGHT) { 

        if (tileRight == Contents.EMPTY || tileRight == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i+1][k] = Contents.PLAYER;        
        } 

       } 

       if(keyCode == KeyEvent.VK_DOWN) { 


        if (tileDown == Contents.EMPTY || tileDown == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i][k-1] = Contents.PLAYER;        
        } 
       } 


      } 
     } 
    } 

} 
+2

使用'switch ... case'。 – AntonH

+1

考慮使用方向和鍵綁定的枚舉,而不是根據[本示例](http://stackoverflow.com/a/21817447/522444)(請運行以查看)的KeyListener。另請參閱[此類似示例](http://stackoverflow.com/a/12545773/522444)。 –

回答

0

如果要將所有語句合併爲一個或使用開關,您可以嘗試使用else。

E.g.

//Use else if and define the condition like you normally do for an if statement 
      if(keyCode == KeyEvent.VK_LEFT) { 

       if (tileLeft == Contents.EMPTY || tileLeft == Contents.GOAL) { 
        levelData[i][k] = Contents.EMPTY; 
        levelData[i-1][k] = Contents.PLAYER; 
       } 

      } else if(keyCode == KeyEvent.VK_UP) { 

       if (tileUp == Contents.EMPTY || tileUp == Contents.GOAL) { 
        levelData[i][k] = Contents.EMPTY; 
        levelData[i][k+1] = Contents.PLAYER; 
       } 

      }else if(keyCode == KeyEvent.VK_RIGHT) { 

       if (tileRight == Contents.EMPTY || tileRight == Contents.GOAL) { 
        levelData[i][k] = Contents.EMPTY; 
        levelData[i+1][k] = Contents.PLAYER; 
       } 

      }else if(keyCode == KeyEvent.VK_DOWN) { 

       if (tileDown == Contents.EMPTY || tileDown == Contents.GOAL) { 
        levelData[i][k] = Contents.EMPTY; 
        levelData[i][k-1] = Contents.PLAYER; 
       } 

      } 

      /** 
      * Alternatively you could use a switch case statement 
      * The same principle with the if statement above, will give you the same result 
      */ 
      switch (keyCode) { 

       case KeyEvent.VK_LEFT: 

        if (tileLeft == Contents.EMPTY || tileLeft == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i-1][k] = Contents.PLAYER; 
        } 

        break; 

       case KeyEvent.VK_UP: 

        if (tileUp == Contents.EMPTY || tileUp == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i][k+1] = Contents.PLAYER; 
        } 

        break; 

       case KeyEvent.VK_RIGHT: 

        if (tileRight == Contents.EMPTY || tileRight == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i+1][k] = Contents.PLAYER; 
        } 

        break; 

       case KeyEvent.VK_DOWN: 

        if (tileDown == Contents.EMPTY || tileDown == Contents.GOAL) { 
         levelData[i][k] = Contents.EMPTY; 
         levelData[i][k-1] = Contents.PLAYER; 
        } 

        break; 
      } 

希望這會有所幫助。 :)

+0

謝謝,非常有幫助! – tim