1

私が書いているプログラムの場合、ユーザーに 1 から 8 までの整数を求める必要があります。これを行う複数の (よりクリーンな) 方法を試しましたが、どれも機能しなかったため、次のようになります。

    int x = 0;
    while (x < 1 || x > 8)
    {   
        System.out.print("Please enter integer  (1-8): ");

        try
        {
            x = Integer.parseInt(inputScanner.next());
        }
        catch(NumberFormatException e)
        {
            x = 0;
        }
    }

inputScannerスキャナーはどこにありますか。きっともっと良い方法がありますか?

4

7 に答える 7

4

スキャナは正規表現を行いますよね? 最初に「^[1-8]$」に一致するかどうかを確認してみませんか?

于 2009-01-22T22:06:55.493 に答える
3

nextInt() を使用することは、単に next() メソッドを使用することと比較して、すでに改善されています。その前に、 hasNextInt() を使用して、この無駄な例外をすべて回避することができます。

次のような結果になります。

int x = 0;
do {
  System.out.print("Please...");
  if(scanner.hasNextInt()) x = scanner.nextInt();
  else scanner.next();
} while (x < 1 || x > 8);
于 2009-01-22T22:09:05.737 に答える
2

グラフィックインターフェイス計算機(整数でのみ機能)を実行する必要がありましたが、問題は、入力が整数でない場合、テストで例外がスローされないことでした。だから使えなかった

try { int x = Integer.parseInt(input)} catch (Exception e) {dosomethingelse}

Javaプログラムは通常、JTextFieldへの入力を文字列として扱うため、これを使用しました。

if (input.matches("[1-9][0-9]*"){ // String.matches() returns boolean
   goodforyou
} else {
   dosomethingelse
}

// this checks if the input's (type String) character sequence matches
// the given parameter. The [1-9] means that the first char is a Digit
// between 1 and 9 (because the input should be an Integer can't be 0)
// the * after [0-9] means that after the first char there can be 0 - infinity
// characters between digits 0-9

お役に立てれば :)

于 2012-12-06T17:22:59.347 に答える
1

次のようなことを試すことができます:

Scanner cin = new Scanner(System.in);
int s = 0;    
boolean v = false;
while(!v){
    System.out.print("Input an integer >= 1: ");

    try {    
        s = cin.nextInt();
        if(s >= 1) v = true;
        else System.out.println("Please input an integer value >= 1.");
    } 
    catch(InputMismatchException e) {
        System.out.println("Caught: InputMismatchException -- Please input an integer value >= 1. ");
        cin.next();
    }
}
于 2015-03-25T05:23:27.643 に答える
0

ApacheCommonsはあなたの友達です。NumberUtils.toInt(String、int)を参照してください

于 2009-01-22T22:33:04.910 に答える
0

コード例:

int x;
Scanner in = new Scanner(System.in);
System.out.println("Enter integer value: ");
x = in.nextInt();

配列を使用して整数を格納することもできます。

于 2010-09-08T17:55:22.350 に答える
0
String input;
int number;

while (inputScanner.hasNextLine())
{
    input = inputScanner.nextLine();

    if (input.equals("quit")) { System.exit(0); }
    else
    {
        //If you don't want to put your code in here, make an event handler
        //that gets called from this spot with the input passed in
        try
        {
            number = Integer.parseInt(input);
            if ((number < 1) || (number > 8))
            { System.out.print("Please choose 1-8: "); }
            else { /* Do stuff */ }
        }
        catch (NumberFormatException e) { number = 0; }
    }
}

ユーザーが Enter ボタンを押したことを確認できるように、私は常に完全な文字列を取得するのが好きです。使用するだけの場合inputScanner.nextInt()は、2 つintの s を 1 つの行に配置すると、1 つが引き込まれ、次にもう 1 つが引き込まれます。

于 2009-01-22T22:10:56.420 に答える