2011-06-24 105 views
4

您可以在Java中的switch語句中包含多個變量嗎?switch語句中變量的數量 - Java

enum Facing { North, South, East, West } 

enum Forward { Right, Left } 

Forward forward; 

Facing facing; 

Integer myNumber; 

所以它看起來像這樣?如果是的話我將如何去實現

switch (facing, forward) { 
    case North, Right : facing 1 = East 
} 

我知道這是錯誤的,但不知道這種技術是否會工作,我將如何實現它?

+0

的swicth語句可以切換僅primitve類型和enums.So你爲什麼不改變所有的枚舉到一個單一的數字,比切換呢? – 2011-06-24 20:17:49

回答

4

你可以這樣做:(例如轉90 clocwise)

switch(facing) 
{ 
    case North: 
     switch(forward) 
     { 
       case Right: // blah blah 
       break; 
     } 
    break; 
} 
+0

這是做到這一點的方法。你甚至可以刪除一些新行來將代碼全部放在一行上,使其更具可讀性和簡潔性。如果使用這種解決方案,不要忘記在所有正確的地方放置'break',因爲這可能會隨着所有排列而快速失控。 –

+0

是的,但是肯定的是if語句在這裏看起來更好更簡單嗎? 'if(facing == North && forward == Right){...} else if(...)' –

0

切實你模擬一組狀態轉換的,當你在一個特定的狀態是(例如,面對北)某些行動導致一個新的狀態(面向東)

你可以用一系列嵌套的switch語句或類似的東西建模這樣的東西。我認爲你可能會盡最大努力將狀態建模爲顯式類,這些類可能來自定義動作的抽象基類。

我懷疑如果你的狀態或行爲變得稍微複雜一些,你會發現你需要這些類。

9

Eng.Fouad給出了一個方法。

另一個altenative可能會創建一個更復雜的面對枚舉這樣的:

enum Facing { 
    North { 
    Facing right() { return East; } 
    Facing left() { return West; } 
    }, 
    East { 
    Facing right() { return South; } 
    Facing left() { return North; } 
    }, 
    South { 
    Facing right() { return West; } 
    Facing left() { return East; } 
    }, 
    West { 
    Facing right() { return North; } 
    Facing left() { return South; } 
    }; 
    abstract Facing right(); 
    abstract Facing left(); 
} 

這樣的結構也可以很容易地鏈接,讓你可以寫這樣的通用反向程序:

Facing reverse(Facing facing) { return facing.right().right(); } 
2

這似乎是它屬於面向:

enum Facing { 

    North, East, South, West; 

    public Facing turn(Forward f) { 
     return values()[(ordinal() + (f == Forward.Right ? 1 : 3)) % 4]; 
    } 
} 
2

與開始JDK 7,你可以用一根繩子開關模擬這個:

Facing facing = Facing.North; 
Forward forward = Forward.Right; 

String facingForward = facing + "-" + forward; 
switch(facingForward){ 
    case "North-Right": return East; 
    .. 
}