2009-10-18 176 views
6

我有一個是或否的問題&答案。如果答案是肯定的,我想問另一個是或否的問題。我的導師希望我們使用charAt(0)作爲答案的輸入。Java問題:是否有可能在另一個switch語句中有switch語句?

是否有可能在另一個switch語句(如嵌套的if語句)?

在此先感謝。

編輯:這是我的僞代碼樣本=

display "Would you like to add a link (y = yes or n = no)? " 
input addLink 

switch (link) 
    case 'y': 
     display "Would you like to pay 3 months in advance " + "(y = yes or n = no)?" 
     input advancePay 

       switch(advPay) 
         case 'y': 
       linkCost = 0.10 * (3 * 14.95) 

       case 'n' 
       linkCost = 14.95    
    case 'n' 
     linkCost = 0.00 
+16

...只是說... – 2009-10-18 01:44:51

+0

我認爲SO的意義在於人們不需要編寫代碼來測試一個想法。 – 2009-10-18 01:48:13

+2

@ande_turner:no。 SO在這裏回答問題,而不是做人而不是做事。 – 2010-02-05 06:56:51

回答

14

是的,但是沒有。如果您需要更進一步的邏輯級別,請將第二臺交換機置於其自己的方法中,並使用描述性名稱。

編輯:通過你添加的例子,你有兩個布爾條件。我建議不要使用開關,而應使用if & else條件。使用(STRING.charAt(0) == 'y')作爲你的測試用例,或者像boolean isY(final String STRING) { return (STRING.charAt(0) == 'y' || STRING.charAt(0) == 'Y'); }

+5

+1爲「是,但不要」的簡潔。 – CPerkins 2009-10-18 15:10:31

1

這樣的方法是可能的,但這將是非常複雜和難以閱讀。幾乎可以肯定有更好的方法,比如在第一個switch語句中調用方法,並在該方法中進行更多必要的處理(如果需要,還包括其他開關)。

0

大多數編程語言都是正交的。這意味着,如果有意義的話,使用特徵通常不取決於位置。

例如,您不能將局部變量聲明爲public。

+1

@Srini:我不明白這是如何回答這個問題的。具體來說,它沒有提到Java中的「switch」是否正交。正交性是程序設計語言設計者爭取的特性,但很少完全實現。如果不理解語言規範,您無法推斷出任何特定的語言構造都是正交的。這可能是一個例外。 – 2009-10-18 02:18:37

2

是的。開關會中斷語言塊語句模式,但這主要是因爲Java使用的switch語句所基於的C/C++。

在所有三種語言,switch語句採用以下形式:

switch(variable) { 
    case n: 
     statement 1; 
     statement n; 
     (optional) break; 
    case n+1: 
     statement 1; 
     statement n; 
     (optional) break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 

由於switch語句中打破了傳統的語言模式,很多程序員使用傳統的塊式的包裝它們的多條語句的情況下:{ }

這是因爲所有三種語言的大多數結構都允許將塊樣式語句視爲一個語句,但switch語句不需要塊樣式在單個個案中執行多個語句。

如果沒有break語句分隔每個case,將會出現「fall through」 - 如果case n匹配並且沒有中斷,那麼將執行它下面的代碼(case n + 1) - 如果case n + 1沒有休息並被匹配,默認代碼將執行,如果兩者都沒有中斷,則在匹配情況n時,將執行情況n,情況n + 1和默認的代碼。

默認值是可選的,並指定要執行的switch語句的默認操作。通常情況下,默認條件是通用處理程序,或者如果值在邏輯上不是邏輯上不是switch語句中的值以外的其他位置,則會引發異常。

爲了說明在switch語句中執行switch語句,來看看這個人爲的例子:

String message = null; 
int outerVariable = getOuterVariable(); 
switch(outerVariable) { 
    case n: 
     statement 1; 
     statement n; 
     break; 
    case n+1: 
     int innerVariable = getInnerVariable(); 
     switch(innerVariable) { 
      case 1: 
       message = "IT WAS 1"; 
       break; 
      default: 
       message = "WHY WOULD YOU DO THIS? OH THE HUMANITY!"; 
     } 
     break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 
在花了你寫的這個問題,你可以自己已經測試了它的時間
+0

只是要小心上面的代碼 - 如果你正在翻譯成java,請注意,case語句必須是常量表達式 – Chii 2009-10-18 02:41:17

+0

Chii - 好點。此外,Java 5的枚舉也可以在switch語句中使用。 – MetroidFan2002 2009-10-18 05:16:53