提问者:小点点

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


我已经尝试搜索谷歌和几个类似这样的网站来找到我问题的答案,但我运气不好。我在大学里上第二层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);
}

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


共1个答案

匿名用户

您可以像这样在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