0

次のコードがあります。

Scanner inputSide = new Scanner(System.in);

double side[] = new double[3];
int i = 0;
do{
    try{
    System.out.println("Enter three side lengths for a triangle (each followed by pressing enter):");
    side[i] = inputSide.nextDouble();
    i++;
    }
    catch(Exception wrongType){
        System.err.println(wrongType);
        System.out.println("Please enter a number.  Start again!!");
        i=0;
    }
}
while(i<3);

それは正常に動作し、間違ったデータ型を入力しなければ意図したことを実行しますが、double 以外のものを入力すると、何度もループし、入力するのを待つ代わりに、try ブロックと catch ブロックの両方ですべてを出力します別のダブル。

なぜこれを行っているのかについての助けをいただければ幸いです-理由が理解できないようです-。

ありがとうございました :)

4

1 に答える 1

2

問題はinput.nextDouble、入力内の次のトークンのみを読み取るメソッドを使用newlineしたため、最後に をスキップしたことです。Scanner.nextDoubleを参照してください

これで、最初に間違った値を入力した場合newline、次の入力として が考慮されます。これも無効になります。

input.nextLinecatch ブロックに空を追加できます。

catch(Exception wrongType){
    System.err.println(wrongType);
    System.out.println("Please enter a number.  Start again!!");
    i=0;
    input.nextLine();  // So that it consumes the newline left over
}

これで、残りの部分nextLine()が読み取らlinefeedれ、改行はnextDouble次回の入力として取り込まれなくなります。その場合、入力を行う前であっても失敗します。

于 2012-11-06T18:50:22.900 に答える