我有以下内容:我很清楚,如果输入的输入不是数字,我必须抓住一个例外,是什么让我发疯只是在第一次运行时这个功能是否有意为止点。当我请求用户输入他们的体重时,它会在while(!isNum)
上进入无限循环。我本以为关闭扫描仪,在第二次运行时重新创建对象会创建一个停止点,允许用户输入数据。我正在使用Eclipse Kepler,它是IDE和Java的新手,正在将它与C#作为初学者进行比较。我们将不胜感激。
import java.text.NumberFormat;
import java.util.InputMismatchException;
import java.util.Locale;
import java.util.Scanner;
import java.util.regex.MatchResult;
import org.omg.CORBA.DynAnyPackage.TypeMismatch;
public class TheValidator {
private int height;
private int weight;
private boolean isNotValid = true;
private boolean weightIsValid = false;
private Scanner sc;
void inputTest(){
while (!isNotValid);{
System.out.print("Please enter your height in inches.");
numTest();
}
isNotValid = true;
while (!isNotValid);{
System.out.print("Please enter your weight in inches.");
numTest();
}
sc.close();
}
void numTest()
{
// Variable to see if entered data is legit number.
while(isNotValid)
{
boolean isNum = false;
boolean isPos = false;
int num = 0;
while(!isNum)
{
if(sc.hasNextInt())
{
isNum = true;
num = sc.nextInt();
if(num > 0)
{
isPos = true;
}
else
{
System.out.println("You entered a number that is not positive. Please ensure you entered a positive numeric number and try again.");
}
}
else
{
System.out.println("What you entered isn't even a number. Please ensure you entered a positive numeric number and try again.");
}
}
if(isNum && isPos)
{
isNotValid = false;
}
}
}
}
答案 0 :(得分:0)
第一个问题是如果hasNextInt()
为假,则需要做一些事情让扫描仪超过非法输入。如果不这样做,扫描仪的光标(指向要查看的下一个输入)将永远保持在同一个地方,从而导致无限循环。如果在hasNextInt()
为false时执行此操作:
sc.nextLine();
将清除该行上的所有其他内容,允许用户输入新输入。
这个修复是不够的;当我添加这个时,我得到了其他例外,我认为这与您为每个输入行打开一个新Scanner
这一事实有关。这不应该是必要的。创建sc
时,您可以将Scanner
初始化为新的TheValidator
;您可能需要将close
方法添加到关闭扫描仪的TheValidator
。