java switch case语句是否为负int值执行多个case?

时间:2015-08-12 08:10:00

标签: java int switch-statement

我只是在我的java代码中遇到一些奇怪的东西:

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

result来自原始类型int。 对于值1case 1case -1已执行。

这是正常的开关案例行为吗?如果是的话:为什么?

6 个答案:

答案 0 :(得分:8)

您需要在break阻止后使用case关键字:

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语句。

答案 1 :(得分:3)

堕落。

quoting from docs

  

break语句是必要的,因为没有它们,switch块中的语句都会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句。

您必须在每个案例后添加break

          case 1:
          result_amount = 600;
          break; 

答案 2 :(得分:0)

如果没有break语句,将执行下一个案例。

答案 3 :(得分:0)

  1. 一般情况下,案例标签应为整数/常数
  2. 没有小数点的负数也被视为整数
  3. 因此没有必要使案例标签大于零
  4. 这是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;
            } 
    

    现在只会执行匹配的案例。

答案 4 :(得分:0)

<强>记住

这是几乎每个初学者都会犯的错误。这就是我更喜欢C#的原因。它不允许“堕落”。

你做错了什么是你倒掉了switch语句。尝试使用0作为result的值。它会经历所有情况。当switch case完成执行时,下一个case将被执行。这就是为什么我们需要为switch语句的每个case添加一个break;语句。

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...
}

答案 5 :(得分:0)

您应该包含break和default以正确的方式运行程序。让我举个例子。

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

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

    }