簡體   English   中英

java switch case語句是否為負int值執行多個case?

[英]Does a java switch case statement execute multiple cases for negative int values?

我只是在我的java代碼中運行一些奇怪的東西:

switch (result) {
            case 0:
                result_amount = 500;
            case 1:
                result_amount = 600;
            case -1:
                result_amount = 700;
    } 

result來自原始類型int。 對於值1 ,執行case 1case -1

這是正常的開關案例行為嗎? 如果是的話:為什么?

您需要在case塊后使用break關鍵字:

switch (result) {
        case 0:
            result_amount = all_amounts[i];
        break;
        case 1:
            result_amount = all_amounts[i];
        break;
        case -1:
            result_amount = all_amounts[i+1];
} 

switch語句將跳轉到正確的case標記,然后執行后面的所有代碼,忽略潛在的其他case標記。 您可以將switch語句視為goto

墮落。

引用文檔

break語句是必需的,因為沒有它們,switch塊中的語句都會失敗:匹配的case標簽之后的所有語句都按順序執行,而不管后續case標簽的表達式,直到遇到break語句。

你必須在每個案例后添加break時間。

          case 1:
          result_amount = 600;
          break; 

如果沒有break語句,下一個案例將被執行。

  1. 通常情況下,標簽應該是整數/常數
  2. 沒有小數點的負數也被視為整數
  3. 因此,沒有必要使Case Labels大於Zero

這是fall through條件fall through

        switch (result) {
                case 0:
                    result_amount = all_amounts[i];
                case 1:
                    result_amount = all_amounts[i];
                case -1:
                    result_amount = all_amounts[i+1];
        } 

為了避免它,你必須把break語句

       switch (result) {
                case 0:
                    result_amount = all_amounts[i];
                    break;
                case 1:
                    result_amount = all_amounts[i];
                    break;
                case -1:
                    result_amount = all_amounts[i+1];
                    break;
        } 

現在只執行匹配的情況。

記住

這是幾乎每個初學者都會犯的錯誤。 這就是我更喜歡C#的原因。 它不允許“墮落”。

你做錯了什么是你倒掉了switch語句。 嘗試使用0作為result的值。 它會經歷所有情況。 當switch case完成執行時,下一個case將被執行。 這就是為什么我們需要增加break; switch語句的每個case的語句。

switch (result) {
            case 0:
                result_amount = 500;
                break;
            case 1:
                result_amount = 600;
                break;
            case -1:
                result_amount = 700;
                break;
} 

但有時我們想要墮落。 例如,當我們想要計算一個月內的天數時:

switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        days = 31;
        break;
    case 2:
        days = 28;
    case 4:
    case 6:
    //Lots of code...
}

您應該包含break和default以正確的方式運行程序。 讓我舉個例子吧。

switch (result) {
            case 0:
                result_amount = 500;
             break;

            case 1:
                result_amount = 600;
            break;
            case -1:
                result_amount = 700;
            break;

    } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM