2013-12-19 25 views
-2

如何使用開關嗨新來編程的人...是否有可能將此更改爲開關語句而不是if if if if if請請指向正確的方向如何使用開關,而不是如果其他如果

int dir = get_dir();

if (dir == 0) // facing north (up) 
     { 
     setX(x); // goes to x position 
     setY(y - 1); // goes to y -1 position 
     } 
    else if (dir == 1) // facing east (right) 
     { 
     setX(x - 1); // goes to x -1 position 
     setY(y); // goes to y position 
     } 
    else if (dir == 2) // facing south (down) 
     { 
     setX(x); // goes to x position 
     setY(y - 1); // goes to y -1 position 
     } 
    else if (dir == 3) // facing west (left) 
     { 
     setX(x - 1); // goes to x -1 position 
     setY(y); // goes to y position 
     } 
+5

是的,這是可能的。你可以使用常量而不是神奇的數字,如SOUTH = 2 .. – nachokk

+0

你已經到了一半。第一步:瞭解開關盒。第二步:實施它。 – keyser

+0

你可以簡化你的if語句。如果'dir == 0'或'dir == 2',你正在做同樣的事情。 '1'和'3'相同 –

回答

0

更改所有ifelse if並將它們放入switch(dir) { }。 E.g改變

`else if (dir == 3)` 

case 3 : 
    your code; 
    break; 

,並把它們裏面switch(dir) { }塊。

8

是的,當然。你只需要爲每個您要結合if語句中創建一個單獨的案例:

int dir = get_dir(); 

switch(dir){ 

case 0:    // facing north (up) 
    setX(x);   // goes to x position 
    setY(y - 1);  // goes to y -1 position 
    break; 

case 1:    // facing east (right) 
    setX(x - 1);  // goes to x -1 position 
    setY(y);   // goes to y position 
    break; 

case 2:    // facing south (down) 
    setX(x);   // goes to x position 
    setY(y - 1);  // goes to y -1 position 
    break; 

case 3:    // facing west (left) 
    setX(x - 1);  // goes to x -1 position 
    setY(y);   // goes to y position 
    break; 
} 

正如其他人已經說過,你也可以創建一個默認的情況下,處理不屬於0-3的選擇。另外,您可以枚舉這些方向或創建常量值以增強可讀性。

+0

只是爲了增加這一點,你可以在最後包含一個'default:'case來提示一個無效的'dir'。當其他交換機沒有找到匹配時,匹配'default:'。 –

+0

謝謝我嘗試了各種方法,只是不斷出現故障 – mylosmum

3

你也可以使用enum s到上的指示進行切換,這可能是一個更易讀,更類型安全的方式,即你不會與其他整數值混音方向:

enum Direction {NORTH, SOUTH, WEST, EAST}; 

public static void main(String[] args) { 
    Direction dir = Direction.EAST; 

    switch(dir){ 
     case NORTH: 
      setX(x);  // goes to x position 
      setY(y - 1); // goes to y -1 position 
      break; 
     case WEST: 
      setX(x - 1); // goes to x -1 position 
      setY(y);  // goes to y position 
      break; 
     ... 
    } 
} 
+1

我第二次使用枚舉,整型常量是邪惡的! –