0

次のコードを使用して、ユーザーに身長をフィートとインチで尋ね、ユーザーの入力が int でない場合はエラー メッセージを返します。

loop = true;
while(loop){
    if(input.hasNextInt()){
        feet = input.nextInt();
        loop = false;
        break;
    }
    else{
        System.out.println("Invalid input, please enter an integer.");
        System.out.print("Feet: ");
        input.nextLine();
    }
}

loop = true;
System.out.print("Inches: ");

while(loop){
    if(input.hasNextInt()){
        inches = input.nextInt();
        loop = false;
        break;
    }
    if(!input.hasNextInt()){
        System.out.println("Invalid input, please enter an integer.");
        System.out.print("Inches: ");
        input.nextLine();
    }
}

プログラムは、足が完全に正常であるというエラー メッセージを返します。

Feet: f
Invalid input, please enter an integer.
Feet:

しかし、最初にインチのエラー メッセージを返すと、2 回返されます。

Inches: f
Invalid input, please enter an integer.
Inches: Invalid input, please enter an integer.
Inches:

このエラーは、ユーザーが整数以外を初めて入力したときにのみ発生します。どうすればこれを取り除くことができますか?

4

2 に答える 2

0

elseフィートに使用しても問題ない場合は、もう一度インチに使用してみませんか?

に変更すると、問題が解決if(!input.hasNextInt())するelseはずです。

于 2013-09-09T19:54:40.517 に答える
0

メソッドは整数の後の文字を消費しnextIntません。\n

2 番目のループでは、hasNextIntが false の場合、行を読み取ります。\nその行は、前回の最終を読み取っているため、空になります。

ループの 2 回目の反復では、入力した最後の行が読み取られ、再びエラーが発生します。

修正は、整数を取得するために常に使用nextLine()して使用することです。それでもうまくいくはずです。Integer.parseInt(String);hasNextInt()

于 2013-09-09T20:01:19.447 に答える