1

ここでの基本的な問題..私は、コードで応答しないようにお願いすることから始めます。それはおそらく私をさらに混乱させるだけです(noobのプログラミング)。私が抱えているこの問題を解決する方法についての明確な説明を探しています。

ユーザーからの入力を読み取るスキャナーがあります。ユーザーは、1から150までのint値を入力するように求められます(整数のみ)。次のように値を取得します。

    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();

そして私のプログラムを続けてください、そしてすべてがうまくいきます。

残念ながら、整数以外の入力(文字、記号など)はコードを壊す可能性があるため、コードは完全に防弾ではありません。

intのみが入力されたことを確認するコードをより堅牢にするにはどうすればよいですか?

これらは私が望んでいる結果です:

入力が次のとおりだったとしましょう:

23 -> valid
fx -> display an error message, ask the user for input again (a while loop would do..)
7w -> error, again
3.7 -> error
$$ -> error
etc
4

7 に答える 7

12

Scanner.hasNextInt()true、次のトークンが数値の場合は戻り、それ以外の場合は返しfalseます。

この例では、hasNextInt()を呼び出します。が返された場合はtrue、しばらく経って入力を設定します。が返さfalseれた場合は、入力()を破棄してscanner.next();繰り返します。

Scanner scan = new Scanner(System.in);
while(!scan.hasNextInt()) {
    scan.next();
}
int input = scan.nextInt();
于 2012-10-29T02:45:51.850 に答える
3

プロンプトとコメントを使用した簡単な例を次に示します。

Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer: "); // Initial prompt for input

// Repeat until next item is an integer
while (!scan.hasNextInt()) 
{        
    scan.next(); // Read and discard offending non-int input
    System.out.print("Please enter an integer: "); // Re-prompt
}

// At this point in the code, the user has entered an integer
int input = scan.nextInt(); // Get the integer

// And now you can use the input variable.
于 2012-10-29T03:03:48.797 に答える
1

scan.hasNextInt()次の入力が。であることを確認するために使用しintます。

于 2012-10-29T02:47:00.547 に答える
1

無効な値ではなく数値が入力された場合にのみプログラムが続行されるようにする例を作成しました。心配しないでください、私は望ましい説明を追加しました。

プログラムは、ユーザーに番号の入力を求めます。ループは、有効な番号が入力されるまで処理が続行されないことを保証します。その前に、デフォルト値としてfalseを持つ変数「inputAccepted」を定義しました。彼が数値を入力すると、変数「inputAccepted」がtrueに設定され、プログラムはループを終了します。ただし、数値以外のものを入力すると、この瞬間に例外がスローされ、変数「inputAccepted」をtrueに設定する行は実行されません。代わりに、入力が無効であることをユーザーに通知するメッセージが出力されます。「inputAccepted」をtrueに設定できなかったため、文字列を数値に変換できるようになるまで、ループは同じ処理を再度実行します。

ここでプログラムをテストできます。

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean inputAccepted = false;
        while (!inputAccepted) {
            try {
                System.out.print("Please enter a number: ");
                Integer.valueOf(input.nextLine());
                inputAccepted = true;
            } catch (NumberFormatException e) {
                System.out.println("Not a valid number.");
            }
        }
        System.out.println("Thank you!");
    }
}
于 2018-04-19T18:48:33.633 に答える
0

「何でも」を取得して解析するだけです。

Scanner scan = new Scanner(System.in);

Integer number = null;
while (number == null) {
    try {
        number = Integer.parseInt(scan.next());
    } catch (NumberParseException e) {
        System.out.println("bad input: " + input);
    }
}
于 2012-10-29T02:50:03.680 に答える
0

コードがなく、英語だけで、テストまたは注意しなければならないことが2つあると思います。まず、入力がintであり、次にintが正しい範囲内にあることです。

擬似コードに関して、最初に行うことは、それがintであることを確認することです。「input」という名前のintを宣言して、try / catchブロックを配置します。ここで、parseInt()を使用して、ユーザー入力をintとしてスキャンしようとします。try部分が失敗した場合、それはintではないことがわかり、エラーメッセージを返す可能性があります。

次に、「input」がintであることがわかったので、それが1未満か150を超えるかをテストし、そうである場合はエラーメッセージを返すことができます。

于 2017-04-06T02:00:24.377 に答える
-1

パブリッククラスサンプル{

/**
 * author CLRZ
 */
public static void main(String[] args) {
    int a; // variable
    Scanner in = new Scanner(System.in); // scans your input
    System.out.println("Enter your number's choice:"); 
    int sem1 = in.nextInt(); // reads next integer
    if (sem1 == 1) // conditioned if your choice number is equal to 1
    System.out.println("Hello World1"); // output wil be Hello World
    int b;

    System.out.println("Enter your number's choice:");
    int sem2 = in.nextInt(); 
    if (sem2 == 2)
    System.out.println("Hello World2");
    int c;

    System.out.println("Enter your number's choice:");
    int sem3 = in.nextInt(); 
    if (sem3 == 3)
    System.out.println("Hello World3");
}

}

于 2013-05-04T08:55:25.470 に答える