【问题标题】:Loop repeating infinitely and displaying error message without user prompting循环无限重复并在没有用户提示的情况下显示错误消息
【发布时间】:2013-12-11 02:52:01
【问题描述】:

当调用此循环时,如果无限运行并显示捕获错误,用户甚至无需输入任何内容。我找不到任何原因。有什么建议吗?

 public Purchase groceryStoreMenu(LemonadeStand lemonadeStand) {

    boolean getMenu = true;
    int userEnteredNumber = -1;
    currentPurchase = new Purchase();

    while(getMenu){
         try{

           System.out.println("Grocery Store");
           System.out.printf("%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n" , "1:" , "Buy lemons", "2:", "Buy cups" , "3:" , "Buy sugar" , 
           "4:" , "Buy ice" , "5:" , "Done"); 

           userEnteredNumber = reader.nextInt();

           if (userEnteredNumber == 1 ) {
              money = lemonadeStand.profit(0);
              lemonsMenu(money);
           }else if (userEnteredNumber == 2){
              money = lemonadeStand.profit(0);
              cupsMenu(money); 
           }else if (userEnteredNumber == 3){
              money = lemonadeStand.profit(0);
              sugarMenu(money); 
           }else if (userEnteredNumber == 4){
               money = lemonadeStand.profit(0);
               iceMenu(money); 
           }else if (userEnteredNumber == 5){
             getMenu = false;
           } else {
            throw new Exception();
           }
          } catch(Exception e) {
            System.out.println("Error in number format. Enter a valid number from the choices (1,2,3,4,5)");
          }

    }
   return currentPurchase;

【问题讨论】:

标签: java loops while-loop infinite-loop infinite


【解决方案1】:

您的代码不会停在reader.nextInt()。这可能是因为您没有在该方法中等待用户输入。

【讨论】:

  • 解决了!我所要做的就是 ad getMenu = false 非常感谢。
【解决方案2】:

您需要定义扫描仪来读取用户输入尝试以下

System.out.println("Grocery Store");
           System.out.printf("%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n" , "1:" , "Buy lemons", "2:", "Buy cups" , "3:" , "Buy sugar" , 
           "4:" , "Buy ice" , "5:" , "Done"); 
           Scanner reader = new Scanner(System.in);
           userEnteredNumber = reader.nextInt();

【讨论】:

    【解决方案3】:
     System.out.printf("%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n" , "1:" , "Buy lemons", "2:", "Buy cups" , "3:" , "Buy sugar" , 4:" , "Buy ice" , "5:" , "Done"); 
    

    字符串格式缺少参数

    当您只需要 5 组选项时,有 6 组 "%s\t%s%n",缺少第 6 组的参数正在创建异常

    【讨论】:

    • 谢谢。这也解决了我的另一个问题。虽然我首先在主菜单中调用了这个菜单,但它会自动转到后面的菜单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2023-04-07
    • 2016-01-16
    • 2011-05-20
    • 2015-12-06
    • 2020-08-18
    相关资源
    最近更新 更多