• ベストアンサー

メソッドが値を返すとき

”メソッドが値を返さない”というエラーで困っています。 次のようなプログラムでは、メソッドが値を返せないのは当たり前なのでしょうか?? public int A(){ int a= 3; int b= 5; if(条件式){ return (Math.sin(a*x)); }else if(条件式){ return (Math.cos(b*x)); }else if(条件式){ return 式 ; } } 「return」をif文のなかに入れてしまうことが,いけないのでしょうか? また,それがしてはいけない事ならば,条件式によって扱うreturn文を変えるには, どうしたら良いかアドバイスを下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

例えば、次のようなメソッドは「メソッドが値を返さない」というエラーになります。 public int method(int value) { if (value > 0) return 0; } もし if の条件(value > 0)が成り立たなかったとき、全く return が行われずにメソッドが終わってしまうからです。次のようなメソッドも、同じ理由で同じエラーになります。 public int method2(int value) {  if (value == 0) {   return 1;  } else if (value == 1) {   return 2;  } } 次のメソッドでは、一見問題がないように思えますが、実はこれもエラーになります。 public int method3(int value) {  if (value >= 0) {   return 3;  } else if (value < 0) {   return 4;  } } 二つの if がどちらも実行されなかった場合、return されずにメソッドが終わってしまうとコンパイラが判断するからです。 上のメソッドでは、実際には (value >= 0) と (value < 0) がどちらも成り立たないということはありえないので、事実上は必ずどちらかの return が実行されるはずではありますが、コンパイラはそこまで見てくれません。 言語の仕様で、「構文」だけを見てエラーかどうか判断する決まりになっているのです。 このメソッドでは、次のように修正すると、正しくコンパイルできます。 public int method3(int value) {  if (value >= 0) {   return 3;  } else {   return 4;  } } この構文では、必ず if と else のどちらかが実行される、と判断されるからです。 以上を参考にして、もう一度 if else の構文を見直してみてください。

maruokundesu
質問者

お礼

詳しく解説して頂き,ありがとうございました。 あまりにも初歩的なミスで,恥ずかしく思います。 とても参考になりました。ありがとうございました。

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

>「return」をif文のなかに入れてしまうことが,いけないのでしょうか? それは問題ありません。 このコードから見ると、おそらく、 すべてのif文の条件式が成立しないとき、 値を返せないのでエラーが出ているのだと思います。 メソッドの終わる直前にreturn 0;とでも書いておけば良いのではないでしょうか。

maruokundesu
質問者

お礼

わかりやすい回答をありがとうございました。 指摘されて,やっと気づきました。 感謝しています。

関連するQ&A