0

Scanner を使用して、ユーザーから数値を取得し、それが 1 から 100 までの整数の場合は「a」に保存するプログラムを作成しました。以下の Java ファイルを参照してください。

public class Parity_Check {
  private static Scanner sc;

  public static void main(String[] args) throws InterruptedException {

    sc = new Scanner(System.in);
    int a, b;
    System.out.print("Enter a number     between 1 and 100: ");

    while(true) {
      b = 0;
      if(!sc.hasNextInt()) {
        System.out.print("That isn't an integer! Try again: "); 
        sc.next();
      }
      else{
        b = sc.nextInt();
        if(b < 1 || b > 100) {
          System.out.print("That integer isn't between 1 and 100! Try again: "); 
          sc.next();
        }
        else{
          a = b; 
          break;
        }
      }
    }
    System.out.print("The number is: "+a+".");
  }
}

私が抱えている問題は次のとおりです。プログラムが「その整数は 1 から 100 の間にありません! もう一度やり直してください: ," ユーザーからの 2 つの入力 (必要な入力ではなく) を待ちます - 最初の入力は完全に無視されます! 問題を説明するために実行したコンソール セッションを次に示します。

"Enter a number between 1 and 100: 2.5
That isn't an integer! Try again: 101
That integer isn't between 1 and 100! Try again: Apple.
42
The number is: 42.”

ご覧のとおり、入力"Apple". に注意を払っていませんでした。次のように、これが正常に機能しない理由が完全にわかりません。

"Enter a number between 1 and 100: 2.5
That isn't an integer! Try again: 101
That integer isn't between 1 and 100! Try again: Apple.
That isn't an integer! Try again: 42
The number is: 42.”

私はJavaに非常に慣れていないので、よく説明されている答えは天の恵みです。どうやって修正するかよりも、なぜうまくいかないのかということに興味があります。

ちなみに、Eclipse 64ビットの最新バージョンを使用しています。

4

3 に答える 3

0

ここではすでにストリームから int を削除しているので、それ以上のものを削除する必要があります。sc.next() への呼び出しを取り出します。

    b = sc.nextInt();
    if(b < 1 || b > 100) {
      System.out.print("That integer isn't between 1 and 100! Try again: "); 
      // sc.next(); remove this
    }

これが以前の if ステートメントの状況とどのように異なるかに注意してください: ユーザーが数値ではない何かを入力した場合、next() を呼び出してストリームから削除する必要があります。ここで nextInt への呼び出しは、すでにストリームから入力を削除しています。

于 2013-10-09T07:31:11.627 に答える
0

以下のメインで試してみてください

public static void main(String[] args) throws InterruptedException {

sc = new Scanner(System.in);
int a, b;
System.out.print("Enter a number     between 1 and 100: ");

while(true) {
  b = 0;
  if(!sc.hasNextInt()) {
    System.out.print("That isn't an integer! Try again: "); 
    sc.next();
  }
  else{
    b = sc.nextInt();
    if(b < 1 || b > 100) {
      System.out.print("That integer isn't between 1 and 100! Try again: "); 
    }
    else{
      a = b; 
      break;
    }
  }
}
System.out.print("The number is: "+a+".");

}

于 2013-10-09T07:42:59.677 に答える