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);
}
我的问题是,当我输入一个字母时,它进入无限循环并且它不会提示用户输入数量....这是
输入数量:数量无效请输入数字!
输入数量:数量无效请输入数字!
输入数量:数量无效请输入数字!......
答案 0 :(得分:3)
您忘记阅读下一行的\n
(或\r\n
)个字符。在您当前的代码中,扫描程序正在等待int
输入,当前下一个输入是此分隔线char。只需在代码中添加sc.nextLine()
即可使用中断行char:
Qty=sc.nextInt();
sc.nextLine();
acceptQty=true;
答案 1 :(得分:0)
从我可以收集的内容来看,您的扫描仪(sc)似乎正在抛出异常。这会导致acceptQty一直是假的,让你陷入内在的do-while循环中。
答案 2 :(得分:0)
您需要在异常块中使用任何非法字符,否则Scanner#nextInt
方法调用将不会使用它们,导致循环无限期地重复:
} catch(InputMismatchException ime) {
System.out.println
("Invalid quantity: " + sc.nextLine() + " please enter a number ");
...
}
答案 3 :(得分:0)
你在读出sc时遇到异常,所以它总是进入无限循环。你能粘贴sc中的值吗?
答案 4 :(得分:-1)
我相信你这样做是错的。您的验证方法非常模糊,可以简化。假设您有以下方法:
public int readNumber(final String prompt, final Scanner scanner){
System.out.println(prompt);
try{
return scanner.nextInt();
}catch(Exception ex){
System.err.println("Enter a valid number");
return readNumber(prompt, scanner);
}
}
此方法将打印出提示符(第一个参数)并从提供的Scanner
(第二个参数)中读取输入。如果用户输入的内容无法解析为int
,则会调用相同的方法(递归)。
取出两个循环,当您想要从int
阅读Scanner
时,请执行以下操作:
int value = readNumber("Enter a quantity", sc);
您肯定知道Integer.MAX_VALUE >= value >= Integer.MIN_VALUE