0

負の整数が検出された場合にカスタムがスローされることを除いて、nextPositiveInt()と同様のメソッドを Scanner に追加したいとします。nextInt()InputNegativeException

を利用するソリューション があるのに、なぜこれを行う必要があるのhasNextInt()でしょうか? 少し簡潔ではありませんが、例外の目的を考えると、はるかに整頓され、より論理的に見えます。例えば:

拡張スキャナー方式:

Scanner cli = new Scanner(System.in);
boolean inputValid = false;

do
{
    System.out.println("Enter your age:");
    try
    {
        int age = cli.nextPositiveInt();
    }
    catch(InputNegativeException e)
    {
        System.out.println("You cannot specify a negative age.");
        inputValid = false;
    }
    catch(InputMismatchException e)
    {
        System.out.println("Your input must be numeric.");
        inputValid = false;
    }
} while(!inputValid);

hasNext()方法:

Scanner cli = new Scanner(System.in);

do
{
    System.out.println("Please enter a positive number!");
    while(!sc.hasNextInt())
    {
        System.out.println("That's not a number!");
        sc.next(); // this is important!
    }
    int number = sc.nextInt();
} while(number <= 0);

したがって、これが非常に悪い考えである理由を私に伝える応答をまだ起動していないと仮定します (そうであれば、そうしてください。スキャナーに検証を入れることに関して異論があるかもしれません)。これ。私はいくつかのマイナーな変更nextInt()での本体を複製する必要があると思いますか? どこからでもnextPositiveInt()体を調達できますか?nextInt()

私が行った努力を示すコードがないことをお詫びしますが、どこから始めればよいかわかりません。

4

2 に答える 2

1

Scanner次の理由で延長できませんfinal:

public final class Scanner
extends Object
implements Iterator<String>

私がすることは、クラスの 1 つにヘルパー メソッドを用意することです。

public static int ensureNonNegative(int val) {
  if (val >= 0) {
    return val;
  } else {
    throw new InputNegativeException(val);
  }
}

次のように使用します。

int val = ensureNonNegative(scanner.nextInt());
于 2012-05-23T07:05:58.723 に答える