Javaのメソッド「public static boolean isOver100(double[] a)」でエラーが発生する理由は?

このQ&Aのポイント
  • Javaの参考書の問題を解いている際に、メソッド「public static boolean isOver100(double[] a)」でエラーが発生しました。
  • エラーメッセージによると、「このメソッドは型booleanの結果を戻す必要があります」と表示されています。
  • return文でtrueやfalseを返しているのに、なぜエラーが発生しているのか理解できません。
回答を見る
  • ベストアンサー

return文について質問

以下は、ある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返してるのに、、 まったく原因わかりません。

  • Java
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

配列aの要素数が0の場合、そのメソッド内のfor文は何もしないので、値を返さずにメソッドが終了してしまうからです。 コンパイルエラーを避けるには、for文の終わった後にもう一つreturn文でtrueかfalseを返すか、IllegalArgumentExceptionなどを発生させる必要があります。 ついでに書くなら、配列aの要素数が0でない場合に先頭要素の値だけでメソッドの返す値が決まってしまいますがそれは意図した動作ですか?

wantanton
質問者

お礼

お返事遅れてしまい大変申し訳ありません、、、、 丁寧なご解答誠にありがとうございます! >配列aの要素数が0でない場合に先頭要素の値だけでメソッドの返す値が決まってしまいますがそれは意図した動作ですか? 意図した動作です! なるほど、、配列aの要素が0の場合、たしかにforは実行しませんね。。

その他の回答 (2)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

forループが1回も実行されない可能性があるため、コンパイル時エラーとなります。 実際、コンパイルエラーにならなくても、このアルゴリズムには誤りがあるような。

wantanton
質問者

お礼

丁寧なご解答誠にありがとうございます! そしてお返事遅れてしまい申し訳ありません! 他の方も回答してくださいましたが、for文と関係してたんですね。 ありがとうございます!

  • kztk
  • ベストアンサー率53% (59/110)
回答No.1

Java2の頃しか知らないので、もう記憶も定かではないですが・・・と言い訳しつつ isOver100()に長さゼロの配列を渡した場合、forの中の処理は1回もされないのではないでしょうか。 その場合、isOver100()はbooleanの戻り値を返せず、ただreturnするだけになってしまいますよね。

wantanton
質問者

お礼

お返事遅れてしまい大変申し訳ありません、、、、 丁寧なご解答誠にありがとうございます! なるほど、for文が関係していたんですね!ありがとうございます!

関連するQ&A

  • return文について質問

    BMIの指数と判定結果を出力したいのですが、「return文が指定されていません」と出てきます。 一番最後の「肥満(4度)」の下の行にreturn d;と挿入すると、ArrayIndexIutIfBoundsExceptionと出てきてしまいました。 何が間違っているのか教えていただければ幸いです。 public class Ex41{ public static void main(String[] args){ double[][] data={ {50,176},{60,170},{70,160},{90,170},{120,175},{120,170} } ; for(int i=0;i<=data.length;i++){ double k=data[i][0]; double c=data[i][1]; } } static double bmi(double k,double c){ double d=k/(c/100)/(c/100); return d; } static double bmicheck (double d){ if(d<18.5) System.out.println("低体重"+d); else if(d>=18.5 && d<25) System.out.println("普通体重"+d); else if(d>=25 && d<30) System.out.println("肥満(1度)"+d); else if (d>=30 && d<35) System.out.println("肥満(2度)"+d); else if (d>=35 && d<40) System.out.println("肥満(3度)"+d); else System.out.println("肥満(4度)"+d); } }

  • for文

    質問お願い致します。 これのソースのfor文を一つの文にするにはどのように書いたらよいでしょうか? お願い致します。 //指定された文字列が"a"と"b"の両方を含む場合はtrue、なければfalseを返す public class Mondai { public static void main(String[] args) { System.out.println("解答 :" + charBothContain("Habllow")); } public static boolean charBothContain(String str) { boolean answer1 = false; boolean answer2 = false; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'a') { answer1 = true; break; } } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'b') { answer2 = true; break; } } return answer1 && answer2; } }

    • ベストアンサー
    • Java
  • VBのReturnの使い方

    Excel2007のVBで以下のfunctionを定義すると、Returnのところでコンパイルエラーになります。 -------------------------------------- Public Function IsTen(lNumber As Integer) As Boolean If lNumber = 10 Then Return True Else Return False End If End Function -------------------------------------- ググってみるとReturn True とか Return False とかができるように思えるのですが、何が不味いのでしょうか? VBの知識はあまりなく、低レベルな質問かもしれませんが、よろしくお願いします。

  • javaプログラムについて

    mainメソッド内の指定された部分の処理を、 別のメソッドに分けてください。 mainメソッド内から作成した別メソッドを呼び出して 実行できるようにしてください。 ※分ける前と分けた後で処理結果が変わらないこと (入力された文字が"A"の場合true, それ以外の場合falseを返すように) */ class MethodAdd1{ public static void main(String[] args){ /* // ★ここから if("A".equals(args[0])){ judge = true; }else{ judge = false; } // ★ここまで */ boolean judge; if("A".equals(args[0])){ System.out.println("true"); }else{ System.out.println("false"); } } /* **戻り値:boolean **引数:String */ //ここにメソッドを作成 public static boolean equals(String a){ String str="A"; if("A".equals(str)){ return true; }else{ return false; } } } これで一応trueかfalseと表示されるのですが、合っているのか分かりません。 お時間のある方で、手直しをして頂ける方お願い致します。

  • Javaのif文がわかりません!

    public class If2 {   static boolean b1, b2;   public static void main(String[] args) {     int x = 0;     if ( !b1 ) {     if ( !b2 ) {       b1 = true;       x++;       if ( 5 > 6) {         x++;       }       if ( !b1 ) x = x + 10;       else if ( b2 = true ) x = x + 100;       else if ( b1 | b2 ) x = x + 1000;       }     }     System.out.println(x);    }  } ------------------------------------------------------------ 正常にコンパイルされ、101とでます。 if文の()内にある!b1というのが意味が分かりません^^; 2行目でb1とb2はfalseになるのは分かりましたが !b1や!b2はfalseではない!ということですか? 誰か教えてください!よろしくお願いします!!

  • boolean型

    class Bool {   static boolean b;   public static void main(String [] args) {     int x=0;     if (b ) {       x=1;     }     else if (b = false){       x=2;     }     else if (b){       x=3;     }     else {       x=4;     }     System.out.println("x = " + x);     System.out.println(b=false);   } } SUNのサイトにあった「どのような結果になるか」と言う問題なのですが、8行目の if(b=false) の部分がifの括弧の中はBoolean型じゃないといけないのに 代入してるからコンパイルエラーだなとおもったのですが あっさりコンパイルは通ってx=4と言う出力です・・・ (b=false) と言うのはどのようにコンパイルされているのですか?? なぜ 代入が、BooleanとしてOKなのでしょうか??

    • ベストアンサー
    • Java
  • return文が指定されていませんと出てくる

    javaの、というかパソコンの超初心者です。 じゃんけんゲームを作るのに、変数「3」を入力したらループから出て終了してもらえるように下記の文のelse if ~を追記したところ、これまでコンパイルできていたのに You.java:24: エラー: return文が指定されていません } と出てきてしまいます。 return;やreturn true; 、false等入力したものの変わらず、何をどこに追記すればいいのかわからないままです。 とてつもなく初歩的な部分かと思いますがどなたかご教授いただけますでしょうか... import java.util.*; public class You extends Player { public Hand nextHand() { Scanner scanner = new Scanner(System.in); while (true) { System.out.print("何を出しますか? グー:0 チョキ:1 パー:2 終了:3 > "); try { int hand_number = Integer.parseInt(scanner.nextLine()); if (0 <= hand_number && hand_number <= 2) { return Hand.fromInt(hand_number); } else if (hand_number == 3){ System.out.println("終了します。"); break; } else { System.err.println("範囲外の数字が入力されています。"); } } catch (NumberFormatException e) { System.err.println("数字以外が入力されています"); } } } }

  • &と|の演算子を使ったif文のプログラムについて

    ↓のプログラムの実行結果について質問します。 public class Test{ public static void main(String args[]){ if(methodA() & methodB() ){ System.out.print(1); }else{ System.out.print(2); } if(methodA() | methodB() ){ System.out.print(3); }else{ System.out.print(4); } } private static boolean methodA(){ System.out.print("A"); return false; } private static boolean methodB(){ System.out.print("B"); return true; } } 上記のプログラムを実行すると AB2AB3 と出力されるのですが、 何故こういう風になるのか教えていただけませんか? また、if文の中をそれぞれ if(methodA() & methodB() ) if(methodA() | methodB() ) と書き換えると A2A3 となるのですが、これについてもイマイチよく分かりません。 メソッドからfalseとtrueを戻り値として受け取り 演算子によって処理を分けているんでしょうけど、 どういう流れで処理が行われているのか 出力結果を見ても読めなくて・・・

    • ベストアンサー
    • Java
  • PHPのreturnについて

    function hoge(){ if(条件){ return false; } 処理A; return true;  } 上記のような場合if文内通ると、return falseするのでその後の処理Aは走らないですよね? 頭がこんがらがってきました・・・

    • ベストアンサー
    • PHP
  • javaのwhile文について

    すいません再び質問です。 じゃんけんの問題です(0がグー、2がチョキ、5がパー、指の本数です) public class Sample9_2 { public static void main(String[] args) { int[] a = { 0, 5, 5, 0 }; int[] b = { 2, 5, 2, 2, 5, 0, }; int[] c = { 5, 0, 2, 0, 2, 5, 2 }; int index = 0; boolean 同じ手を出していない = true; while (同じ手を出していない) { if (a[index % a.length] == b[index % b.length] && b[index % b.length] == c[index % c.length]) { 同じ手を出していない = false; } else { index++; } } System.out.println((index + 1) + "回目で全員が同じ手を出しました"); } } 【実行結果】 50回目で全員が同じ手を出しました boolean 同じ手をだしていない = true と 同じ手を出していない = false の意味がわかりません; すいませんが回答お願いします。

専門家に質問してみよう