【问题标题】:Switch Statements切换语句
【发布时间】:2011-05-24 04:38:31
【问题描述】:

对于 switch 语句,是否可以在 switch 语句中更改 switch 的值,以便它可以跳转到不同的情况? 例如:

int w = 0;
switch(w)
{
   case 1:
     doSomething();
     w = 3;
   case 2:
     doSomething();
     break;
   case 3:
     doSomething();
     break;
}

基本上我要问的是,如果我没有为一个 case 放置 break 语句并且我在同一个 case 中更改了 switch 的值,那么代码会执行这两个 case 吗?

【问题讨论】:

  • 你试过了吗?另外,你为什么要做这么令人困惑的事情?
  • @Rafe - 重要的是精神,何不试试呢?
  • 最好的方法:尝试调试你的代码......你会知道会发生什么:)

标签: case switch-statement break


【解决方案1】:

是的,您可以更改 switch 内部的值,但它不会执行新值的 case,直到您在更改值的情况下中断。

在您的情况下,它无论如何都不会发生,因为没有 0 的情况。但是如果您更改为 w = 1,那么它将适用于情况 1,然后是情况 2,因为您没有休息;但它不适用于案例 3。

【讨论】:

  • 但是 break 语句不是从整个 switch 语句中完全中断吗?
  • @Andrew:如果你使用 break,我就是这么说的;那么新值不会做任何事情。如果你没有休息,那么它将进入下一个案例。但无论如何,无论有没有休息;更改值不会导致自动调用相应的案例。
  • 所以基本上,如果我在case语句中不包含break,代码将执行与我放置的新值对应的case语句?
  • @Andrew:不。在任何情况下,更改值都不会导致自动调用相应的案例。
【解决方案2】:

不,它不会改变,也不会执行新的 case 语句。

请记住,一旦找到与 switch 语句中的值对应的 case 语句适当匹配,该特定 case 将被执行,并且一旦执行(如果在每个 case 之后提供 break 以防止所有 case 都掉下来),然后控制返回到 switch 语句的末尾。

示例代码:

public  class A {
            public static void main(String [] args) {
                    int i=1;
                    switch(i) {
                            case 1 : 
                                    System.out.println("Case 1");
                                    i = 2;
                                    break;
                            case 2 : 
                                    System.out.println("Changed to Case 2");
                                    break;

                             default:
                                    System.out.println("Default");
                                    break;
                            }

                    System.out.println("Final value of i " + i);
            }
    }

输出:

Case 1
Final value of i 2  

注意:插入正确的断点,尝试调试。你会了解自己,到底发生了什么。

【讨论】:

    【解决方案3】:

    如果我们在每个 case 之后都不给 break,那么 Java 将从匹配的 case 开始执行语句,并继续执行后续 case 的语句,直到找到 break 语句或遇到 switch 语句结束。

    【讨论】:

      【解决方案4】:

      如果case 1 恰好执行,它只是失败case 2。而且由于case 2 中有break,因此不会发生进一步的失败。由于case 1 中的声明w = 3 ;,它不会跳转到case 3

      【讨论】:

        猜你喜欢
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多