1. ホーム
  2. java

[解決済み] InputMismatchExceptionが発生するのはなぜですか?

2022-01-26 04:21:17

質問

今のところ、こんな感じです。

public double checkValueWithin(int min, int max) {
    double num;
    Scanner reader = new Scanner(System.in);
    num = reader.nextDouble();                         
    while (num < min || num > max) {                 
        System.out.print("Invalid. Re-enter number: "); 
        num = reader.nextDouble();                         
    }
    return num;
}

とこれを

public void askForMarks() {
    double marks[] = new double[student];
    int index = 0;
    Scanner reader = new Scanner(System.in);
    while (index < student) {
        System.out.print("Please enter a mark (0..30): ");
        marks[index] = (double) checkValueWithin(0, 30); 
        index++;
    }
}

これをテストすると、二重番号を取ることができず、次のようなメッセージが表示されました。

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at MarkingSystem.checkValueWithin(MarkingSystem.java:25)
at MarkingSystem.askForMarks(MarkingSystem.java:44)
at World.main(World.java:6)
Java Result: 1

どうすれば直るの?

どのように解決するのですか?

の性質を見ることができます。 スキャナ :

double nextDouble()

次のトークンをdoubleで返します。 次のトークンがfloatでない場合や が範囲外である場合、InputMismatchException がスローされます。

例外をキャッチしてみる

try {
    // ...
} catch (InputMismatchException e) {
    System.out.print(e.getMessage()); //try to find out specific reason.
}

アップデイト

CASE 1

あなたのコードを試してみましたが、何も問題はありません。このエラーが発生した理由は を入力したはずです。 String . 数値を入力すると、何のエラーもなく実行されます。しかし、一度私が入力した String それ throwException ということで、ご質問の中にあった

CASE 2

あなたは何かを入力しました、それは 範囲外 上記で述べたとおりです。

何を入力しようとしたのか、本当に不思議です。私のシステムでは、一行のコードも変更することなく、完全に動作しています。そのままコピーして、コンパイルと実行を試してみてください。

import java.util.*;

public class Test {
    public static void main(String... args) {
        new Test().askForMarks(5);
    }

    public void askForMarks(int student) {
        double marks[] = new double[student];
        int index = 0;
        Scanner reader = new Scanner(System.in);
        while (index < student) {
            System.out.print("Please enter a mark (0..30): ");
            marks[index] = (double) checkValueWithin(0, 30); 
            index++;
        }
    }

    public double checkValueWithin(int min, int max) {
        double num;
        Scanner reader = new Scanner(System.in);
        num = reader.nextDouble();                         
        while (num < min || num > max) {                 
            System.out.print("Invalid. Re-enter number: "); 
            num = reader.nextDouble();                         
        } 

        return num;
    }
}

おっしゃるとおり、入力しようとしたのは 1.0 , 2.8 などがあります。このコードで試してみてください。

注意:数字は1つずつ、別々の行に入力してください。つまり 2.7 を入力し、Enterキーを押した後、2つ目の数字を入力します。 6.7 ).