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

java switch case语句是否为负int值执行多个case?,java,int,switch-statement,Java,Int,Switch Statement,我只是在java代码中遇到了一些奇怪的东西: switch (result) { case 0: result_amount = 500; case 1: result_amount = 600; case -1: result_amount = 700; } 结果来自基本类型int。 对于值1,执行案例1和案例-1

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

switch (result) {
            case 0:
                result_amount = 500;
            case 1:
                result_amount = 600;
            case -1:
                result_amount = 700;
    } 
结果
来自基本类型int。 对于值
1
,执行
案例1
案例-1


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

您需要在
案例
块后使用
中断
关键字:

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
标记。你可以考虑<代码>开关>代码>语句,就像<代码> Goto 一个。

< P>没有<代码>破解< /Cord>语句,将执行下一个案例。

< P> <强>

break语句是必需的,因为如果没有它们,开关块中的语句就会失效:匹配的case标签之后的所有语句都会按顺序执行,而不管后续case标签的表达式如何,直到遇到break语句为止

您必须在每个案例后添加
中断

          case 1:
          result_amount = 600;
          break; 
  • 通常情况下,大小写标签应为整数/常量
  • 没有小数点的负数也被视为整数
  • 因此,大小写标签不必大于零
  • 这是故障状态

            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#more。它不允许“失败”

    你做错了的是你没有通过switch语句。尝试使用0作为
    结果的值
    。它将贯穿所有案例。当一个开关案例完成执行时,将执行下一个案例。这就是为什么我们需要添加一个
    break语句,用于switch语句的每种情况

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

    从我的观点来看,您也应该始终在switch case的末尾声明default。但是为什么要将其放入'-1'的case中呢。“1”与开关盒的“-1”相同吗?因为您没有包含
    中断语句,因为执行流经过
    case1
    case1
    ,因为它们之间没有
    break