Java切换案例之间没有每次跳过剩余的案例

时间:2017-03-12 14:05:06

标签: java switch-statement

我是Java的新手,非常感谢一些帮助。 我想在这里做的是在案件之间切换。但是,我还需要不要跳过此过程中的其余案例。

我的意思是下面的代码应输出: 二 四 三 4

public class X {
    public static void main(String[] args) {
        String n = "two";
        while(true)
        {
            switch (n)
            {
                case "zero":
                {
                    System.out.println("zero");
                    n="one";
                }
                case "one":
                {
                    System.out.println("one");
                    n="three";
                }
                case "two":
                {
                    System.out.println("two");
                    if (12>3)
                    {
                        n="four";
                        break;
                    }
                }
                case "three":
                {
                    System.out.println("three");
                }
                case "four":
                {
                    System.out.println("four");
                    return;
                }
            }
        }
    }
}

我用return来结束while循环。现在我明白我在第二种情况下使用了break,它会破坏当前的开关,从而无法完成它。但如果我不这样做,我就不能在案件之间切换。所以,我需要一个不同的解决方案。在java中工作实现应该会有所帮助。感谢

4 个答案:

答案 0 :(得分:0)

问题不在于switch语句。你只需要区分你来自哪里。

要做到这一点,你需要记住它,例如在局部变量中:

String lastN;

并且在切换之前的循环中:

lastN = n;

现在您可以执行以下操作:

case "four":
    {
        System.out.println("four");
        if("three".equals(lastN))
        {
            return;
        }
        else
        {
            n = "three";
            break;
        }
    }

答案 1 :(得分:0)

如果您需要的是fall through,那么您的代码正常运行 然后考虑必须首先执行一个的情况......

另一方面,您无需将 {} 添加到案例组

case "zero": {
    System.out.println("zero");
    n = "one";
}

答案 2 :(得分:0)

public static void main(String[] args) {
        String n = "two";
        while(true)
        {
            switch (n)
            {
                case "zero":
                {
                    System.out.println("zero");
                }
                case "one":
                {
                    System.out.println("one");
                }
                case "two":
                {
                    System.out.println("two");
                }
                case "four":
                {
                    System.out.println("four");
                    if(n=="four"){
                        return;
                    }
                }
                case "three":
                {
                    System.out.println("three");
                    n="four";
                }
            }
        }
    }

答案 3 :(得分:0)

您可以使用Queue
每个案例都负责按预期执行的顺序将下一个添加到队列中。

Queue q = new LinkedList();
q.add("two");
String n = (String)q.poll();
while(n!=null)
{
    switch (n)
    {
        case "zero":
        {
            System.out.println("zero");
            q.add("one");
            break;
        }
        case "one":
        {
            System.out.println("one");
            q.add("three");
            q.add("two");
            break;
        }
        case "two":
        {
            System.out.println("two");
            if (12>3)
            {
                q.add("four");

            }

             q.add("three");
             break;
        }
        case "three":
        {
            System.out.println("three");
            q.add("four");
            break;
        }
        case "four":
        {
            System.out.println("four");
            break;
        }
    }
    n=(String) q.poll();
}