2014-09-01 67 views
-6

我已經在Java中編寫了以下方法。但是,我在包含返回(Constants.SUCCESS)的行上收到錯誤消息無法訪問的代碼;在swtch語句中無法訪問的代碼

如果我評論該行,我不會收到錯誤消息。現在我的疑問是,如果我評論該行,我不會收到錯誤消息?如果我評論該行,則呼叫部分沒有SUCCESS的返回值。我認爲應該有一個返回語句,並且如果所有「if循環」都沒有,並且默認沒有執行。我認爲最後的回報聲明將在任何情況下執行。我在最後還嘗試了返回(Constants.SUCCESS)語句(註釋行),但沒有運氣。 因此,爲了獲得成功,我是否需要在每個case語句的每個「if」循環之後返回成功(爲每個case語句創建「else」部分)。

static int validateStartAndEndStringOrder(String startStr, String endStr, ArrayList<String> swaraPool, Constants.PatternType ptrnType) { 
     switch (ptrnType) { 
      case AROHA_INCREASING: { 
       if (swaraPool.indexOf(endStr) < swaraPool.indexOf(startStr)) { 
        System.out.println("End string is before the start String"); 
        return (-1); 
       } 
      } 
      case AROHA_DECREASING: { 
       if (swaraPool.indexOf(startStr) < swaraPool.indexOf(endStr)) { 
        System.out.println("End string is before the start String"); 
        return (-1); 
       } 
      } 
      case AVAROHA_INCREASING: { 
       if (swaraPool.indexOf(endStr) < swaraPool.indexOf(startStr)) { 
        System.out.println("End string is before the start String"); 
        return (-1); 
       } 
      } 
      case AVAROHA_DECREASING: { 
       if (swaraPool.indexOf(startStr) < swaraPool.indexOf(endStr)) { 
        System.out.println("End string is before the start String"); 
        return (-1); 
       } 
      } 
       default: { 
       System.out.println("Invalid Enumeration Type"); 
       return(-1); 
      } 
       return (Constants.SUCCESS); 
     } 
//return (Constants.SUCCESS); 
} 

回答

1

我懷疑你想在你case塊的末尾添加break;。否則代碼只是從上到下運行(就像代碼中的其他任何地方一樣)

如果你放置一個break;它會跳出switch塊,這看起來是你想要的。

例如

 case AROHA_INCREASING: { 
      if (swaraPool.indexOf(endStr) < swaraPool.indexOf(startStr)) { 
       System.out.println("End string is before the start String"); 
       return (-1); 
      } 
      break; // without this, the thread will run the next case: block. 
     } 
1

switch ... case 1 ... case n ... default涵蓋所有控制路徑(default將捕獲所有剩餘的情況下)。既然你明確地從每一個返回,那麼程序控制就不能超越switch塊。

您的編譯器正在幫助發出錯誤。

使用break;switch塊中的每個case之間的語句將控制流移動到塊的末尾。

1

你默認部分包含

{ 
    System.out.println("Invalid Enumeration Type"); 
    return(-1); 
} 
return (Constants.SUCCESS); 

你有什麼期望?