我已经尝试搜索谷歌和几个类似这样的网站来找到我问题的答案,但我运气不好。我在大学里上第二层Java课程,我试图弄清楚如何在使用try-catch块的同时对浮点数进行输入验证。场景的要点是这样的:
一个驱动程序将调用该方法,该方法应该将用户的条目作为浮点数拉入。问题是,使用try-catch块,如果扫描仪检测到非浮点数,它不会将数据从扫描仪的缓冲区中转储。这导致了一个无限循环。我已经修改了在catch块中添加一个Scanner.next(),但是第一次尝试后输入的任何数据都不会正确验证(这意味着我可以输入诸如5.55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555的内容,它会接受这是一个有效的输入)。
这是我正在使用的代码(我已经在类的顶部导入了我需要的所有东西,而母亲高度是类顶部的私有浮点实例变量):
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);
}
关于如何完成正确的输入验证的任何指示或提示将不胜感激。谢谢
您可以像这样在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