浮点数的输入验证(在Try-Catch块内)

时间:2013-04-21 17:52:33

标签: java try-catch validation

我已经尝试过搜索谷歌和这样的几个网站来找到我的问题的答案,我只是没有运气。我在大学的二级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);
}

关于如何完成正确的输入验证的任何指示或提示都将非常感激。感谢

1 个答案:

答案 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