0

センチネルの終了キーを終了するように設定しようとしている下部で問題が発生しています.どのようにそれを行うべきか正確にはわかりません。

int 番号;

    do
    {

            Scanner Input = new Scanner(System.in);
    System.out.print("Enter a positive integer or q to quit program:");
        number = Input.nextInt();
    }
    while(number >= 0);

    do
    {

            Scanner Input = new Scanner(System.in);
    System.out.print("Input should be positve:");
        number = Input.nextInt();
    }
    while(number < 0);

            do 
            {

             Scanner quit = new Scanner(System.in);   
             System.out.print("Enter a positive integer or quit to end program");
             input = quit.nextstring();   


            }
             while (!input.equals(quit))//sentinel value allows user to end program
            {
            quit = reader.next()  
4

1 に答える 1

1

いくつかのヒント:

  • 反復ごとに新しい Scanner を初期化しないでください。非常にコストがかかります。
  • あなたが書いたように、ユーザーが負の数を入力すると、最初の while ループに戻って正の数を入力し続けることができないことに注意してください。
  • これを 3 つではなく 1 つの while ループにまとめたいと思います。そうしないと、これらのアクションを順番に実行して、3 つのセンチネル条件すべてを突破する必要があります。
  • System.out.print() は改行を追加しないため、見栄えが悪くなります。

これらの仮定に基づいてendLoop、終了条件が満たされた場合、つまりユーザーが「quit」と入力した場合にリセットされる 1 つの番兵変数を持つバージョンを次に示します。彼らが負の数を入力すると、「入力は正でなければなりません」というメッセージが表示され、ループが最初からやり直され、正の数を入力すると何も起こりません (アクションを追加する場所をマークしました) とループ最初からやり直します。入力 (文字列) を int にキャストするのは、それが 'quit' でないことを確認した後だけです。これは、文字列 ('quit' など) を int にキャストしようとすると、プログラムがクラッシュするためです。

Scanner input = new Scanner(System.in);
boolean endLoop = false;
String line;
while (!endLoop) {
  System.out.print("Enter a positive integer or 'quit' to quit program: ");
  line = input.nextLine();
  if (line.equals("quit")) {
    endloop = true;
  } else if (Integer.parseInt(line) < 0) {
    System.out.println("Input should be positive.");
  } else {
    int number = Integer.parseInt(line);
    //do something with the number
  }
}

終了条件に 0 の代わりに 'quit' を使用するように編集しました。ユーザーが数字または 'quit' 以外の何かを入力すると、このプログラムはクラッシュすることに注意してください。

于 2014-09-19T23:44:20.730 に答える