【问题标题】:Infinite Java loopJava 无限循环
【发布时间】:2017-11-25 12:44:54
【问题描述】:

请看一下这段代码,告诉我哪里出错了?我是 java 新手,我在下面的 switch 语句中得到了一个无限循环。

以下是我使用 system.out 作为占位符调用的完整方法,直到我修复了无限循环。

提前致谢

public void startuserinterface()

{
    Scanner Menukeyboard = new Scanner(System.in);
    displaymainmenu();
    mainMenuChoice = Menukeyboard.nextInt();

    while(mainMenuChoice!=EXIT)
    {

        switch(mainMenuChoice){

        case DISPLAY_ROOMS :  {
            System.out.println(" I am displaying rooms ");

            break;
            }

        case DISPLAY_GUESTS : {
            System.out.println(" I am displaying guests  ");
            break;
        }

        case PROCESS_RESERVATION  : 
        {
            System.out.println(" I am displaying reserving ");
            displayreservationmenu();
            resMenuChoice = Menukeyboard.nextInt();
            runResMenu(resMenuChoice);
            break;
        }


        case PROCESS_PAYMENT : 
        {
            System.out.println(" I am payin  ");

            break;


        }

        }
    }

    System.out.println(" Goodbye ");
    displaymainmenu();



    }

【问题讨论】:

  • 你永远不会改变mainMenuChoice
  • 如果我有一个 break 语句,为什么我需要更改 mainmenuchoice?它不应该继续循环中断。
  • 因为break 打破了case,而不是while 循环。
  • 如果你调用的方法(即displayreservationmenu()enukeyboard.nextInt()runResMenu())不影响mainMenuChoice,它永远不会得到EXIT的值,所以while 循环永远不会结束。
  • 感谢大家的反馈。我已经更新了while循环由用户输入驱动的方法。

标签: java infinite-loop


【解决方案1】:

switch语句执行完毕并发生break后,条件返回while循环。它再次检查相同的值,即不等于 Exit,因此它再次运行 switch 语句。

基本上,您在同一个 Exit 上一次又一次地检查而不更改值。并且由于在第一次尝试时该值不等于 Exit,这使得每次检查时都为真,因此它将永远运行。

【讨论】:

  • 感谢您的帮助。我知道我哪里出错了。毫无疑问是业余错误。
【解决方案2】:

你必须结束while循环。在给定的例子中休息;仅结束 switch 语句并再次执行 while 循环。并且因为没有地方可以改变while循环的条件,也就意味着这个循环永远为真->永远执行。

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 2015-08-29
    • 2012-01-24
    • 2013-04-06
    • 2011-01-06
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多