2016-11-04 10 views
0

私は現時点でJavaを学んでおり、2つのキーワードのいずれかが入力されるまで入力を求めるメソッドを作成する必要があります。その場合はintを返す必要があります。コンパイルされていないintを返す再帰メソッド

public static int getCommand(){ 
    String command = IOTools.readString("Enter Command!"); 
    if (command.equals("exit")){ 
     return 1; 
    } else if (command.equals("shift")){ 
     return 0; 
    } else { 
     getCommand(); 
    } 
} 

私がいる問題は、日食があればブロックの後にreturn文を無効または追加するには、戻り値の型を変更するか私に語ったということです。 enter image description here 再帰的なアプローチに問題がありますか?

+0

につながる必要がありますか? – ItamarG3

+2

行43: 'getCommand();'の代わりに 'return getCommand();'しかし、私はこのようなものに対して再帰的なアプローチはしません。無効なコマンドが入力されると、スタック使用量が増加し続ける可能性があります(末尾再帰用に最適化されていない場合)。ちょうどループを使用してください。 – lurker

+0

elseブランチでも、値を常に_返す必要があります(たとえば、 'return getCommand();')。 – Thomas

答えて

1

あなたが最後のケース

public static int getCommand(){ 
    String command = IOTools.readString("Enter Command!"); 
    if (command.equals("exit")){ 
     return 1; 
    } else if (command.equals("shift")){ 
     return 0; 
    } else { 
     return getCommand(); 
    } 
} 

この機能getCommand();呼び出しはint値を返しているが、コントロールは、あなたのelseケース内部にある場合ではないelse場合には、あなたの再帰関数がする呼び出すようにreturnタイプを追加する必要がありますgetCommand();elseの場合にはintの値を返すという保証はないが、コンパイラはエラーを検出し、returnタイプがではないこのケースによれば、javaは

と言う

機能のすべての実行パスは、ちょうど他の最後を取り除くない理由RETURN文

6

あなたはreturnの文が欠落している、あなたの再帰呼び出しに

public static int getCommand(){ 
    String command = IOTools.readString("Enter Command!"); 
    if (command.equals("exit")){ 
     return 1; 
    } else if (command.equals("shift")){ 
     return 0; 
    } else { 
     return getCommand(); // Added return here 
    } 
} 
+0

あなたはとても素早く、わずか11秒でans –

+0

ありがとうたくさん:)おかげで、クレイジーな速いhaha –

+0

@PaulEtscheitええ私のページもさわやかこの回答を見る:P –

1

Returnステートメントは、あなたのMethodeのすべてのパスが何かを返す必要があり、ここで

else { 
    getCommand(); 
} 

が不足しています。

関連する問題