0

私は自分の質問に対する答えを見つけるために、Google やこのようないくつかのサイトを精査しようとしましたが、うまくいきません。私は大学で第 2 層の Java コースを受講しており、try-catch ブロックを使用して浮動小数点数の入力検証を行う方法を理解しようとしています。シナリオの要点は次のとおりです。

ドライバーはメソッド promptForMotherHeight() を呼び出します。このメソッドは、ユーザーのエントリを浮動小数点数として取り込むことになっています。問題は、try-catch ブロックで、スキャナが非浮動小数点数を検出した場合、スキャナのバッファからデータをダンプしないことです。これは無限ループにつながります。I've tinkered with adding a Scanner.next() inside my catch block, but any data entered after the first attempt will not validate properly (meaning that I can enter in something such as 5.55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 and it will accept this as a valid input) .

これが私がコード的に取り組んでいるものです(クラスの上部に必要なものをすべてインポートしました.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);
}

適切な入力検証をどのように達成できるかについての指針やヒントをいただければ幸いです。ありがとう

4

1 に答える 1