当前位置: 首页 > 知识库问答 >
问题:

我的代码会无限循环,不再提示用户

仲孙毅
2023-03-14
boolean acceptPcode=true;
boolean acceptQty=false;
int Qty=0;
List<Integer> purchasedProdQty=new ArrayList<>();

while(acceptPcode==true && acceptQty==false){
        do{
            try{
                 System.out.print("Enter Qty: ");
                    Qty=sc.nextInt();
                    acceptQty=true;                 
              }catch(InputMismatchException ime){
                    System.out.println("Invalid quantity please enter a number!");
                    acceptQty=false;
              }

                    if(acceptQty==true)
                    purchaseProdQty.add(Qty);

           }while(acceptQty==false);

} 

我的问题是,当我输入一个字母时,它会进入无限循环,不会提示用户输入数量。。。。那是

输入数量:无效数量请输入数字!

输入数量:无效数量请输入数字!

输入数量:无效数量请输入数字!......

共有3个答案

程谭三
2023-03-14

您需要使用异常块中的任何非法字符,否则它们不会被Scanner#nextInt方法调用所消耗,从而导致循环无限期重复:

} catch(InputMismatchException ime) {
    System.out.println
      ("Invalid quantity: " + sc.nextLine() + " please enter a number ");
    ...
}
谷梁云瀚
2023-03-14

据我所知,您的扫描仪(sc)似乎抛出了一个异常。这会导致AcceptQuantity不断出错,使您陷入内部do-while循环。

金承嗣
2023-03-14

您忘记读取下一行的\n(或\r\n)字符。在当前代码中,扫描仪正在等待int输入,但当前的下一个输入是此换行符。只需在代码中添加sc.nextLine(),即可使用换行符:

Qty=sc.nextInt();
sc.nextLine();
acceptQty=true;
 类似资料:
  • 我的代码需要反复提示用户输入一个整数。当用户不再想继续输入数字时,输出用户输入的所有正数之和,然后输出用户输入的所有负数之和。以下是我到目前为止的情况。

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l

  • 我添加了一个while循环,这样如果用户输入无效值,代码将重新提示用户输入有效值。但是当用户输入无效值时,代码会进入无限循环。任何帮助都将不胜感激!!

  • 该程序应该使用int 0x10在ASCII中打印一个具有给定字符的金字塔,3行的预期结果(下面代码中使用的数量)将是: A. a a a a a 要编译和运行代码,我使用nasm编译它,然后使用qemu进行仿真: 然而,程序get无法打印所有ASCII值。此外,如果有任何针对nasm代码的调试器,可以让您逐行运行,允许您检查寄存器值,这对学习也很有帮助。

  • 我对react钩子和效果有点陌生,在使用useEffect时遇到了问题 上面的代码是我构建的useEffect,用于使用axios获取数据库中的所有数据,并且我将所有数据放在一个称为reports的状态中。 但是当我console.log报告时,它会导致无限循环。我不知道为什么? 让我给你看一个我做的简单动作。 我正在做一个按钮,当它被点击时,报告的状态(按id)将被更新。 这是该州报告结构的样本

  • 我写了这个简单的代码来获取一个double,并一直询问直到得到一个为止,但是当你给一个string时,它就变成了一个无限循环,我不知道为什么。为什么它会这样?