0

だから私はここに楽しみのためにコードを書いていますが、修正できないように見えるエラーが発生しました。このコード ブロックは int を受け取ることになっています...最初は、while ループだけで hasNextInt() を使用して、正しい入力を取得していることを確認しましたが、運命のように..例外。次に、何か間違ったことをしただけかもしれないと考えて、try catch を追加しましたが、それでも同じエラーが発生します。ここで何が悪いのかわかりません。これは実際に try catch ブロックを使用するのは初めてです (まだ初心者のようなものです)。それは私には良さそうで、オンラインでドキュメントを見て、いくつかの簡単な調査を行いましたが、役に立ちませんでした。誰かがここで何が悪いのかを特定できますか? 見てみな:

do{
    System.out.println("How much AP do you want to allocate towards HP? ");

    try {//added try catch... still throwing the exception..

        while(!in.hasNextInt()){//this should've been enough, apparently not
            System.out.println("That is not a valid input, try again.");
            in.nextInt();
            }
    } catch (InputMismatchException e) {
        System.out.print(e.getMessage()); //trying to find specific reason.
    }
    hpInput = in.nextInt();
}while(hpInput < 0 || hpInput > AP);

文字列を入力すると、「それは有効な入力ではありません。再試行してください。」行..しかし、実際のintが検出されるまでループするのではなく、例外がすぐに発生します...助けてください..

4

2 に答える 2

2

ループwhileは次のようになります

while(!in.hasNextInt()){ // <-- is there an int?
    System.out.println("That is not a valid input, try again.");
    // in.nextInt(); // <-- there is not an int...
    in.next(); // <-- this isn't an int.
}

Scannerには がないためintです。

于 2015-02-26T03:02:11.237 に答える
0

何かが入力されるまで値を実際に検証することはできませんが、Scanner入力されると、それを検証するには遅すぎます...

代わりに、たとえば、キーボードを介してユーザーから取得しScannerた結果を検証するために 1 秒を使用できます。String

Scanner kbd = new Scanner(System.in);
int result = -1;
do {
    System.out.println("How much AP do you want to allocate towards HP? ");
    String value = kbd.nextLine();
    Scanner validate = new Scanner(value);
    if (validate.hasNextInt()) {
        result = validate.nextInt();
    }
} while (result < 0);
于 2015-02-26T03:01:43.503 に答える