【问题标题】:Why is my switch statement not working and stuck in an infinite loop?为什么我的 switch 语句不起作用并陷入无限循环?
【发布时间】:2014-11-17 00:31:35
【问题描述】:

我试图让它输出用户的财富,但它只会输出用户无限输入的数字。

我做错了什么?如何修复无限循环?

public static void main(String[] args) {

    Scanner broncos = new Scanner ( System.in );

    int x, y, a;

    System.out.println("Would you like me to tell your fortune? Type 1 for yes and any other number for no: ");
    x = broncos.nextInt();


    while (x==1)
    {   
        System.out.println("Enter a number from 1-8: ");
        y = broncos.nextInt();

        while ( y > 0 && y < 9)

        System.out.println( y );
        System.out.print ( "That's not a valid number. Try again. ");
        y = broncos.nextInt();
    }


    System.out.println ("Enter a number from 1-8: ");
    a = broncos.nextInt();


    switch (a) 
    {
        case 8 : 
            System.out.println ("You will win the lottery" );
            break; 
        case 7 : 
            System.out.println ("You are going to do great things");
            break; 
        case 6 : 
            System.out.println ("Don't get out of the house today");
            break; 
        case 5 : 
            System.out.println ("You'll get a raise at work");
            break;  

        case 4 : 
            System.out.println ("Lucky day today");
            break; 

        case 3 : 
            System.out.println ("Not so lucky day today");
            break; 

        case 2 : 
            System.out.println ("Your favorite sports team will win" );
            break; 

        case 1 :
            System.out.println ("Your car is going to break down" );
            break;

        default: 
            System.out.println ( "You didn't enter 1-8!" );
    }

    broncos.close();
}

【问题讨论】:

    标签: java switch-statement infinite-loop


    【解决方案1】:

    导致问题的不是您的 switch 语句,而是之前的 while 循环。您像在while (x==1) 中一样测试x,但是在while 循环中您在哪里更改x?如果你从不改变x的状态,测试永远不会变成假,循环也永远不会退出。

    正如 Tom 敏锐地指出的那样,您将希望验证您的 y 输入的 while 循环包含与获取 y 输入相关的所有代码。

    while ( y > 0 && y < 9) {
        System.out.println("Enter a number from 1-8: ");
        y = broncos.nextInt();
    
        if (y > 0 && y < 9) {    
            System.out.println( y );
            System.out.print ( "That's not a valid number. Try again. ");
        }
    }
    

    现在在你的 switch 语句中使用正确的y

    另外,一旦你有一个正确的y,就没有必要得到一个a

    // System.out.println ("Enter a number from 1-8: ");
    // a = broncos.nextInt();
    

    同样,只需在 switch 语句中使用 y

    至于您的x,无需验证它(除非您需要检查它是否实际上是一个数字),因为输入的任何数字都应该有效。

    【讨论】:

    • 您能否添加信息,由于缺少大括号,这同样适用于 while ( y &gt; 0 &amp;&amp; y &lt; 9) 循环?因为这个,我不想写另一个答案:)。
    • 我仍然遇到错误?你能修复代码并为我粘贴吗?
    • @JakeHansen: Edit your original question 请。不要更改您已经发布的代码,但请在底部发布您的最新代码以及任何和所有错误消息。关于" Can you fix the code and paste it for me?"——正如汤姆所说,为你做作业或解决你的作业不是我们的工作,你也不应该要求任何人为你做这件事(就像你刚才所做的那样),而是我们的工作是让您了解这些概念,以便您自己修复它。
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多