[英]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 1
和case -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
語句,下一個案例將被執行。
這是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.