我已经尝试过搜索谷歌和这样的几个网站来找到我的问题的答案,我只是没有运气。我在大学的二级Java课程,我正试图弄清楚如何在使用try-catch块的情况下对浮点数进行输入验证。场景的要点是这样的:
驱动程序将调用方法promptForMotherHeight(),此方法应该将用户的条目作为浮点数引入。问题在于使用try-catch块,如果扫描程序检测到非浮点数,它将不会将数据转储出扫描程序的缓冲区。这导致无限循环。我修修补补和我的catch块中加入Scanner.next(),但第一次尝试将未正确验证后输入任何数据(这意味着我可以在一些诸如5.55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555进入,它会接受这个作为一个有效输入) 。
这是我正在使用的代码方式(我已经在类的顶部导入了我需要的所有东西,而motherHeight是类顶部的私有float实例变量):
public void promptForMotherHeight()
{
String motherHeightPrompt = "Enter mother's height in inches: ";
String motherError1 = "Invalid entry. Must be positive.";
String motherError2 = "Invalid entry. Must be a decimal number.";
boolean valid = false;
do
{
System.out.print(motherHeightPrompt);
try
{
motherHeight = stdIn.nextFloat();
valid = true;
}
catch (InputMismatchException e)
{
System.out.println(motherError2);
stdIn.next();
}
} while(!valid);
}
关于如何完成正确的输入验证的任何指示或提示都将非常感激。感谢
答案 0 :(得分:0)
您可以在try-catch
中执行浮点数验证。
do {
System.out.print(motherHeightPrompt);
try {
motherHeight = Float.parseFloat(stdIn.nextLine()); // This will read the line and try to parse it to a floating value
valid = true;
} catch (NumberFormatException e) { // if it was not a valid float, you'll get this exception
System.out.println(motherError2);
// You need not have that extra stdIn.next()
// it loops again, prompting the user for another input
}
} while (!valid); // The loop ends when a valid float is got from the user