2015-12-02 72 views
-1

所以我需要實現一個switch語句,在給定命令時使用。這些命令就像「結束」或「B」。但是,其中一個命令在程序後面提到某個事物後,會以「S1」或「S6」的形式進行設置。我可以爲所有其他命令執行switch語句,並且還可以同時執行「S」+ int嗎?這意味着它將轉到以「S」開頭的switch語句的那一部分,而不管之後的編號如何?我可以用帶這個參數的字符串做一個switch語句嗎?

switch(command) { 
    case "B": 
     .... 
     break; 
    case "S" + %d (???): // I know this won't work, just trying to convey the idea 
     .... 
     break; 
} 
+4

不,你不能這樣做。 – Tunaki

+1

你必須在'default:'中處理它。 –

+1

使用默認情況(其他情況不匹配),然後在那裏執行正則表達式,可以避開它。 – JCOC611

回答

0

號如果這種開關是要走的正確方法(如果經常不,你可能希望看到在這種情況下枚舉多麼富有幫助),那麼你可以試試這個:

switch (command.charAt(0)) { 
    case 'B': 
     .... 
     break; 
    case 'S': 
     switch (command.chatAt(1)) { 
      case '0': 
       .... 
       break; 
     } 
     .... 
     break; 
} 

添加方法來枚舉,這將很可能導致在這種情況下更易讀的應用程序代碼,解釋in the Java tutorials。 Stack Overflow有幾個很好的例子。看看this question的答案。

爲例:(當然,你可以把所有的邏輯基礎doStuff(),而忘記了重寫它爲每個枚舉值,如果這是你的情況更好)

public enum CommandType { 
    B { 
     @Override 
     public Object doStuff() { 
      ... 
     } 
    }, 
    ... 
    S1 { 
     @Override 
     public Object doStuff() { 
      ... 
     } 
    }, 
    ... 
    S6 { 
     @Override 
     public Object doStuff() { 
      ... 
     } 
    } 

    public abstract Object doStuff(); 
}; 

那麼你的應用程序代碼可以這樣做

Enum.valueOf(CommandType.class, command).doStuff(); 
+1

你的意思是'command.charAt(0)'而不是'command [0]',對吧? :) –

+0

嘿是的。對不起,現在用C#模式:) –

1

由於Java 7,在switch聲明的情況下,標籤可以String秒。當然,那麼switch表達式也必須是String。案例標籤必須是常數String s,但是,沒有任何形式"S" + %d (???)或任何類似的東西都支持。

如果你只有一個特例命令來處理,但是,那麼也許你可以在default情況處理:

switch(command) { 
    case "B": 
     .... 
     break; 
    case "FOO": 
     // ... 
     break; 
    default: 
     if (command.startsWith("S")) { 
      // ... 
     } else { 
      // whatever ... 
     } 
     break; 
} 
相關問題