[英]infinite loop on non-numeric input in java
這是一個簡單的java函數,輸入為double。 它需要一個輸入並首先檢查該值是否為非數字。 然后檢查該值是否大於0。
我面臨的問題是每次輸入非數字輸入時,它都會運行一個無限循環並且只打印"Enter a number greater or equal to 1.0: "
double getInput(double n) {
Scanner kbd = new Scanner(System.in);
boolean flag = false;
boolean check = false;
while (!flag) {
System.out.println("Enter a number greater or equal to 1.0: ");
try {
n = kbd.nextDouble();
if (n >= 0 || n < 0)
check = true;
} catch (InputMismatchException ex) {
err.print("Invalid Data Type (not Numeric)");
}
if (check == true) {
if (n < 0)
System.out.println("Invalid value (too small)");
else
flag = true;
}
}
return n;
}
kbd.nextDouble
不會消耗換行符,因此會將這些字符重復傳遞到while循環中。
在catch塊中而不是僅拋出異常,您可以傳遞kbd.nextLine(),以便在下一個循環中輸入方法就緒。
catch(InputMismatchException ex)
{
System.out.println("Invalid Data Type (not Numeric)");
kbd.nextLine();
}
以下是完整的代碼:
double getInput(double n)
{
Scanner kbd = new Scanner( System.in );
boolean flag =false;
boolean check = false;
while(!flag)
{
System.out.println("Enter a number greater or equal to 1.0: ");
try
{
n = kbd.nextDouble();
if(n>=0 || n<0)check = true;
}
**catch(InputMismatchException ex)
{
System.out.println("Invalid Data Type (not Numeric)");
kbd.nextLine();
}**
if(check==true)
{
if(n<0)
System.out.println("Invalid value (too small)");
else
flag = true;
}
}
return n;
}
從掃描儀讀取雙倍值不會讀取行尾
n = kbd.nextDouble();
所以掃描儀對象將有一些東西要讀取,除非你得到行結束調用
kbd.nextLine();
在異常到來之后完全做到這一點的邏輯點......
catch (InputMismatchException ex) {
System.err.print("Invalid Data Type (not Numeric)");
kbd.nextLine(); ///here!!!
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.