2017-03-16 11 views
1

ここに最初の投稿/質問があり、Javaについては非常に新しいです。小さなテキストベースのムービーデータベースアプリケーションを作成しようとしています。それの一部はレビューを追加することです。問題は、レビューでスコアナンバー[0-10]を求められたときに[入力]を押すだけです。プロンプトが1ステップ下がり、入力を待っています。私はこのフィールドを空白のままにすることは不可能であることを望みます。hasNextInt()は、Enterキーを押したときに入力を待機し続けます。

int score; 
do { 
    while (!sc.hasNextInt()) { 
    sc.next(); 
    System.out.print("\nInvalid input! "); 
    System.out.print("Please enter a number from 0-10: "); 
    } 
    score = sc.nextInt(); 

    if (!(score >= 0 && score <= 10)) { 
    System.out.print("\nInvalid input! "); 
    System.out.print("Please enter a number from 0-10: "); 
    } 
} while (!(score >= 0 && score <= 10)); 

答えて

2

Scannerトークン、空白で区切られた、すなわちテキスト読んでいる:ここでは私がこれまで持っているものです。つまり、Enterを押すだけで、次のトークンはまだ開始されていません。

Scannerの誤りの1つは、使用するのがとても簡単だということです。ユーザ入力を誤って処理する。

例:123 abc<enter>と入力するとどうなりますか?あなたのコードは123となり、次のプロンプトのためにバッファにabcを残して続行します。これは、テキストが必要な場合があり、そのテキストとしてabcを読み込みます。おっとっと!!

ほとんどの場合、悪いユーザー入力を処理するために、hasNextXxx()nextXxx()の方法はnextLine()以外には使用しないでください。 1つのプロンプトに対して1つの回答(入力)を得るための唯一の方法です。

だから、あなたはこのような何かをする必要があります

int score; 
for (;;) { 
    System.out.print("Please enter a number from 0-10: "); 
    String line = sc.nextLine(); 
    try { 
     score = Integer.parseInt(line.trim()); 
    } catch (NumberFormatException e) { 
     System.out.println("Invalid input! Not a number."); 
     continue; 
    } 
    if (score < 0 || score > 10) { 
     System.out.println("Invalid input! Out of range."); 
     continue; 
    } 
    break; 
} 
+0

多くの義務がします!これを覚えておいてください。悪いユーザ入力を処理するときは、nextLine()メソッドを使用しないでください。 for-loopの使い方も学ばなければなりません。これは私のプログラムのいくつかの部分で便利になるでしょう。 – SamKar

関連する問題