メモのコツを教えてください!

以下は、あるJavaの参考書の問題を僕が解いてソースコードに起こしたものです。その際のエラーが出てしまうことについて、その原因を質問させていただきます。


package 第16章;

public class 練習16_4_4 {
public static void main(String[]arg){
double[]dt={55.1,23.0,168.8,25.6,33.1,101.5};
System.out.println(isOver100(dt));
}
public static boolean isOver100(double[]a){
for(double x:a){
if(x>100.0){
return true;
}else{
return false;
}

}

}
}


質問:『public static boolean isOver100(double[]a){』、ここの部分でエラーとして「このメソッドは型booleanの結果を戻す必要があります」と表示されます。何故ですか?だって、return文で型booleanであるtrueやfalse返してるのに、、
まったく原因わかりません。

A 回答 (3件)

配列aの要素数が0の場合、そのメソッド内のfor文は何もしないので、値を返さずにメソッドが終了してしまうからです。


コンパイルエラーを避けるには、for文の終わった後にもう一つreturn文でtrueかfalseを返すか、IllegalArgumentExceptionなどを発生させる必要があります。

ついでに書くなら、配列aの要素数が0でない場合に先頭要素の値だけでメソッドの返す値が決まってしまいますがそれは意図した動作ですか?
    • good
    • 0
この回答へのお礼

お返事遅れてしまい大変申し訳ありません、、、、
丁寧なご解答誠にありがとうございます!

>配列aの要素数が0でない場合に先頭要素の値だけでメソッドの返す値が決まってしまいますがそれは意図した動作ですか?

意図した動作です!
なるほど、、配列aの要素が0の場合、たしかにforは実行しませんね。。

お礼日時:2011/09/27 19:20

forループが1回も実行されない可能性があるため、コンパイル時エラーとなります。


実際、コンパイルエラーにならなくても、このアルゴリズムには誤りがあるような。
    • good
    • 0
この回答へのお礼

丁寧なご解答誠にありがとうございます!
そしてお返事遅れてしまい申し訳ありません!

他の方も回答してくださいましたが、for文と関係してたんですね。

ありがとうございます!

お礼日時:2011/09/27 19:22

Java2の頃しか知らないので、もう記憶も定かではないですが・・・と言い訳しつつ



isOver100()に長さゼロの配列を渡した場合、forの中の処理は1回もされないのではないでしょうか。
その場合、isOver100()はbooleanの戻り値を返せず、ただreturnするだけになってしまいますよね。
    • good
    • 0
この回答へのお礼

お返事遅れてしまい大変申し訳ありません、、、、
丁寧なご解答誠にありがとうございます!

なるほど、for文が関係していたんですね!ありがとうございます!

お礼日時:2011/09/27 19:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!