2014-04-10 4 views
-1

이 KeyListener에있는이 4 개의 if 문은 입력 된 화살표 키를 확인합니다. 4 if 문을보다 간결한 switch 문 또는 조건문에 결합하여보다 효율적으로 만들고 싶습니다.if 문을 1 switch 문에 결합

4 if 문을 하나의 조건문 또는 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가 아닌 Direction 및 Key Bindings 열거 형을 사용하는 것이 좋습니다. [이 비슷한 예] (http://stackoverflow.com/a/12545773/522444)를 참조하십시오. –

답변

0

모든 문을 하나로 결합하거나 스위치를 사용하는 경우 else를 사용해 볼 수 있습니다.

예.

//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