1
    // Precondition: number provided is a positive integer
    // Postcondition: returns a integer of length 4
     public static int validateNumber(int num, Scanner scan)
{
    int number = num;
    while(number < 1000 || number > 9999)
    {
        try
        {
            System.out.print("Number must be 4 digits long. Please provide the number again: ");
            number = scan.nextInt();    // reads next integer provided                                      
            scan.nextLine();
        }
        catch(InputMismatchException e) //outputs error message if value provided is not an integer
        {
            System.out.println("Incorrect input type.");
        }
    }
    return number;
}

前提条件が満たされていると仮定すると、このメソッドが実行され、文字列を入力してプログラムをテストすると、無限ループが発生します。なぜこの問題が発生するのですか?どうすれば修正できますか?

4

4 に答える 4

0

コードは問題ないように見えますが、代わりに次のことを考慮してください。

while ((int)Math.log10(number) != 3)
于 2013-12-23T10:22:14.360 に答える
0

私が見ることができる1つの問題は、try catchブロックを注意深く見るだけです-

整数以外の入力を入力すると、scanner.nextInt() が InputMisMatchException をスローし、コントロールがブロックをキャッチするようになるため、最終的に新しい値が数値に割り当てられないため、前の数値自体をチェックするため、再び条件が満たされます。 .

うまくいかない場合は試してみてください。入力ケースを送信して分析し、渡すメソッドの num の初期値を教えてください。

于 2013-12-23T10:31:47.790 に答える