3
protected int readInt(String prompt) {
    try {
        System.out.print(prompt);
        int i = keyboard.nextInt();
        keyboard.nextLine();
        return i;

    } catch (java.util.InputMismatchException e) {
        System.out.println("Error: Insert a number.");
    }
}

やあ!Eclipse はメソッド readInt() でこのエラーを表示します:「このメソッドは int 型の結果を返す必要があります。」ソリューションの例として、「return ステートメントを追加する」と「戻り値の型を void に変更する」を示します。return i ステートメントを try-and-catch ループの外に置こうとしましたが、そうすると、return ステートメントは変数 i を見つけることができません。

私はこれにしばらく苦労してきましたが、うまくいかないようです...助けていただければ幸いです! ありがとうございました。

4

5 に答える 5

2

が発生した場合に何が起こるかを考えてくださいInputMismatchException

あなたのコードはそれをキャッチし、 print "Error: Insert a number.". そして、何?関数は int を返すように宣言されており、何も返さないパスがあります。

他の方法では返せないエラーを示す値を返すか、例外を再スローする必要があります。

于 2014-01-16T20:07:43.667 に答える
1

私のコードでは、 return ステートメントにスコープの問題がないようiに、ブロックの外側で宣言されています。try-catchまた、値 -1 が与えられるため、例外が発生した場合、関数は呼び出し元に -1 を返します。

protected int readInt(String prompt) {
    int i=-1;
    System.out.print(prompt);  
    try { 
        i = keyboard.nextInt();
        keyboard.nextLine();    
    } catch (java.util.InputMismatchException e) {
        System.out.println("Error: Insert a number.");
        keyboard.next();
    }
    return i;
}
于 2014-01-16T20:06:52.247 に答える
0

戻り値の型を持つメソッドの場合、JVM はこのメソッドを呼び出した後に戻り値を期待する必要があります。この場合、戻り値は try {} のみです。どのような場合でも、try セグメント内のすべてのステートメントを実行していない場合、戻り値の型がないため、コンパイラ エラーが発生したとします。return を catch セグメントと try セグメントの内側に配置するか、try と catch の両方の外側に配置できます。

于 2014-01-16T20:13:35.983 に答える
0

を消費しているため、がスローInputMismatchExceptionされた場合に何を返せばよいかわかりません。ブロックにいくつかまたはいくつかをInputMismatchException含めることができます。throwExceptionreturncatch

于 2014-01-16T20:11:34.263 に答える