• 締切済み

助けて下さい…

かなりピンチの学生です(>_<)この前質問したのですが禁止事項にひっかかったので削除ました↓↓プログラム途中マデ頑張ったのですがやっぱりわかりません。 名前、身長、体重をデータメンバとし、身長と体重のデータから肥満度を判定し、判定結果を文字列で返すhanteiからなるクラスManを作りなさい。 ・BMI=体重(kg)÷身長(m)の2乗 ・BMIとは   やせ   20未満   正常   20以上24未満   やや肥満 24以上26.5未満   肥満   26.5以上 ヒントを参考に頑張ったのですが解りません…()で囲んだトコは自分で考えたのですがホトンド間違ってます。途中から進まないので教えて下さいpublic class Sokutei { public static void main(String[] args) { (Man[] m = new Man[5];) m[0] = new Man("Bill",1.89,69); m[1] = new Man("Lisa",1.70,87); m[2] = new Man("Alice",1.55,63); m[3] = new Man("Machilda",1.60,56); m[4] = new Man("Joe",1.75,55); for( int i = 0; i < m.length; i++){ ( System.out.println(m[i]+":"+ m[i].hantei());) } } } class Man{ private String name; private double height,weight; public Man(String a ,double b ,double c){ (name=a;) (heigth=b;) (weigth=c;) } public String hantei(){ ( double hantei = weigth / heigth / heigth;) ( if(hantei<20){) (System.out.println("やせ");) ( }) ( else if(20 <= hantei && hantei<24){) ( System.out.println("正常");) ( }) ( else if(24 <= hantei && hantei<26.5){) (System.out.println("やや肥満");) ( }) ( else{) (System.out.println("肥満");) ( }) } }

  • okuuy
  • お礼率18% (8/44)
  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.3

前のお二人の指摘を参考に修正してまだ出来ないときはこのコードを試してください。 public class Sokutei { public static void main(String[] args) { Man[] m = new Man[5]; m[0] = new Man("Bill",1.89,69); m[1] = new Man("Lisa",1.70,87); m[2] = new Man("Alice",1.55,63); m[3] = new Man("Machilda",1.60,56); m[4] = new Man("Joe",1.75,55); for( int i = 0; i < m.length; i++){ System.out.println(m[i].getName() +":"+ m[i].hantei()); } } } class Man{ private String name; private double height, weight; public Man(String a ,double b ,double c){ name = a; height = b; weight = c; } public String getName(){ return name; } public String hantei(){ double hantei = weight/(height * height); if(hantei<20){ return "やせ"; } else if(20 <= hantei && hantei<24){ return "正常"; } else if(24 <= hantei && hantei<26.5){ return "やや肥満"; } else{ return "肥満"; } } }

  • nimua
  • ベストアンサー率21% (8/38)
回答No.2

学生さんなら、結構いいソースだと思いますよ。 問題点を列挙します。 ・変数名  Manクラス内の変数名がばらばらです。  ロジック云々以前の問題ですね。  この程度は修正してから、ソース提示してほしいところです。 ・System.out.println(m[i]+":"+ m[i].hantei());  「m[i]」はManクラスのインスタンスをそのまま出力しようとしているだけです。  文字羅列が出力されていますよね。  欲しいのは、Manクラスの変数nameに格納されている値だと思います。  privateな変数ですので、アクセッサを作成しましょう。  例:public String getName() {    return name;    }  次に「m[i].hantei()」の部分ですが。  Man#hantei()はStringを戻り値とするように宣言されています。  しかし、return句が存在しませんね。  根本的にエラーです。  修正例:System.out.println("XXX"); → return "XXX";(Manクラス内の全部の箇 所)  上記作成した上で、出力部分を、  System.out.println(m[i].getName()+":"+ m[i].hantei()); で出力はされると思われます。 んー、キーワードとして、 ・インスタンス ・カプセル化 ・戻り値 の部分の理解が足りないので困っておられると推測します。 ここからはご質問内容とは関係ないのですが、 ソースを提示する際に、余計な「()」は見づらいだけだと思います。 また、コンパイルエラーはもう少し減らしてから出しましょう。 このレベルのソースを作ろうとされている質問者様でしたら、 ご自分で減らす事も可能だと思います^^

  • mak22
  • ベストアンサー率38% (15/39)
回答No.1

SokuteiクラスでnewしてManを呼び出していますが、これでは各値を設定しただけで、なにもアクションが帰ってきませんよね。せっかくhantei()メソッドを作ったのですから呼び出してあげてください。あと、hantei()メソッドに返り値Stringが設定されていますが、なにもreturnしていませんね。『判定結果を文字列で返す』のであれば、sysoutで出力しないでStringで返してあげましょう。 きっとコンパイル時にたくさんのエラーが出ていることと思います。エラーの意味をきちんと理解することが大切です。

関連する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); } }

  • 至急!java オブジェクト指向

    昨日、質問させていただいた者です。おかげさまで、試合の状況を出力するプログラムが完成しました。あとはこれをオブジェクト指向のプログラムにしたいので、BSO()、Runner()、Score()のメソッド等を別々のクラスに記述して動作させるようにしたのですが、エラーばかりで起動できませんでした。インターフェースや継承などを使っていただいて構わないので、できれば改良のほうをお願いします。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int sc=0,bc=0,oc=0,rc1=0,rc2=0,rc3=0,tenA=0,tenB=0,i=0; BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); while(true){ i++; while(true){ System.out.println("ピッチャー、投げた!"); String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s'){ System.out.println("ストライク!"); sc++; }else if(hantei=='b'){ System.out.println("ボール!"); bc++; }else if(hantei=='o'){ System.out.println("アウト!"); oc++; bc=sc=0; }else if(hantei=='h'){ System.out.println("ヒット!"); bc=sc=0; }else if(hantei=='x'){ System.out.println("ホームラン!"); bc=sc=0; }else{ System.out.println("入力が違います。"); continue; } if(sc==3){ System.out.println("ストライク!バッターアウト!"); oc++; sc = bc =0; }else if(bc==4){ System.out.println("フォアボール!"); sc = bc =0; } if(oc >= 3){ System.out.println("スリーアウト!"); break; } System.out.println("走者は出たか、又は進塁したか?"); String str6=br.readLine(); char kakuninn=str6.charAt(0); if(kakuninn=='y'){ System.out.println("一塁は"); String str2=br.readLine(); char r1=str2.charAt(0); if(r1=='y'){ rc1=1; }else if(r1=='n'){ rc1=0; }else{ System.out.println("入力が違います。"); continue; } System.out.println("二塁は"); String str3=br.readLine(); char r2=str3.charAt(0); if(r2=='y'){ rc2=1; }else if(r2=='n'){ rc2=0; }else{ System.out.println("入力が違います。"); continue; } System.out.println("三塁は"); String str4=br.readLine(); char r3=str4.charAt(0); if(r3=='y'){ rc3=1; }else if(r3=='n'){ rc3=0; }else{ System.out.println("入力が違います。"); continue; } }else{ } System.out.print("得点は? :"); String str7=br.readLine(); int tokuten=Integer.parseInt(str7); if(i%2==1){ tenA=tenA+tokuten; }else{ tenB=tenB+tokuten; } BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); } oc=0; rc1=rc2=rc3=0; BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); if(i==6){ System.out.println("ゲームセット!"); break; }else{ } } Score(tenA,tenB,i); } public static void BSO(int sc, int bc, int oc){ System.out.println("---- BSOカウント ----"); System.out.print("B "); for(int i=1;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=1;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=1;i<=oc;i++){ System.out.print("〇"); } System.out.println("\n------------------"); } public static void Runner(int rc1,int rc2,int rc3){ System.out.println("***走者の有無***"); if(rc2==1){ System.out.println(" ▲ "); }else if(rc2==0){ System.out.println("  △ "); } if(rc3==1){ System.out.print("▲  "); }else if(rc3==0){ System.out.print("△  "); } if(rc1==1){ System.out.println("▲"); }else if(rc1==0){ System.out.println("△"); } System.out.println("***************"); } public static void Score(int tenA,int tenB,int i){ if(i==0||i==1||i==2){ System.out.print("1回"); }else if(i==3||i==4){ System.out.print("2回"); }else if(i==5||i==6){ System.out.print("3回"); } if(i==0||i%2==1){ System.out.println("表"); }else{ System.out.println("裏"); } System.out.println(tenA+" "+"-"+" "+tenB); } }

    • ベストアンサー
    • Java
  • [至急!]Javaのプログラミング

    野球のBSOカウンタを作ろうとしているのですが、エラーが出ないもののうまく動きません。動作としてはsと入力したらSのカウンタに「〇」を表示、といったことをO(アウト)カウンタが3つになるまで行うプログラムなのですが、入力と出力の両方をうまくループすることが出来ません。分かる方がいたら教えてください。私が作ったものは下のものです。これを改良して作っていただけると助かります。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //String str=br.readLine(); //char hantei=str.charAt(0); int sc=0,bc=0,oc=0; while(oc<3){ String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s') { sc=sc+1; if(sc==3) oc=oc+1; sc=0; bc=0; } else if(hantei=='b') { bc=bc+1; if(bc==4) sc=0; bc=0; } else if(hantei=='o') { oc=oc+1; sc=0; bc=0; } else { System.out.println("入力が違います。"); } } System.out.print("B "); for(int i=0;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=0;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=0;i<=oc;i++){ System.out.print("〇"); } System.out.println(""); } } 出力例 s(入力) B S 〇 O s(入力) B S 〇〇 O s(入力) B S O 〇 これをアウトカウントが3つになるまで行うプログラムです。

    • ベストアンサー
    • Java
  • うるう年

    うるう年を表記するプログラムを組みたいのですがどこがだめなのでしょうか。よろしくお願いします。 public class kadai1 { public static void main(String[] args) { for(long i=1582; i<=2004; i++){ if(i%400==0); System.out.println("i"); else if(i%100==0); System.out.println("i"); else if(i%4==0); System.out.println("i"); } } }

    • ベストアンサー
    • Java
  • Javaについて質問します。

    全員のjudgeBMIの適用結果を表示させたいのですが 下から4行目のcalcBMIにエラーが出てしまいます。 どこを修正すればいいかわからなく困っています。 わかる方いましたら教えていただきたく質問しました。 public class Enshu14_3 { private static double calcBMI(double weights, double heights){ return(weights/(heights*heights)); } private static String judgeBMI(double bmi){ String result; if(bmi<18.5){ result="やせ"; }else if(30.0<=bmi){ result="高度肥満"; }else if(25.0<=bmi){ result="肥満"; }else{ result="標準"; } return result; } public static void main(String[] args){ double[] weights = {64.0,51.5,70.2,58.3,85.4}; double[] heights = {1.65,1.67,1.66,1.75,1.68}; for(int i=0; i<weights.length; i++){ System.out.println(i+"番目の人は"+judgeBMI(calcBMI(weights,heights))+"です。"); } } }

  • intではなくStringで・・・

    こんなソースがあります。。 public class Check { public static void main(String[] args) { int i = Integer.parseInt(args[0]); if (i == 123) { System.out.println("あたり!"); } else if (i < 123) { System.out.println("はずれ!"); } else { System.out.println("おおはずれ!"); } } } これを、int型の文字を入力して判定させるのではなく、String型の文字で判定させたいのですが、 int i = Integer.parseInt(args[0]);をどう変えればいけるでしょうか? よろしくお願いします!

    • ベストアンサー
    • Java
  • java enum

    エラー内容 int cannot be dereferenced 何が原因でエラーになっているのですか? import java.util.*; enum light{ red,yellow,blue } class m1{ public static void main(String[] args){ int light; Scanner ss = new Scanner(System.in); System.out.println("整数値を入力 : "); int i = ss.nextInt(); if(i == light.red.ordinal()){ System.out.println("信号は赤色です"); } else if(i == light.yellow.ordinal()){ System.out.println("信号は黄色です"); } else if(i == light.blue.ordinal()){ System.out.println("信号は青色です"); } } }

  • クラス宣言の身長と体重の比較

    適切な範囲の身長(110cm 以上200cm 未満)と体重(0kg を越える)のデータからBMI 体格 指数を計算し、表示するプログラムを下記で作成したのですが、「入力エラー1:身長データ 205.600 cm と体重データ -85.900 kg  110cm 以上200cm 未満の身長で、0kg より重い体重でしか計算できません。」と表示されません。むしろ、「入力エラー3:身長データ 205.600 cm   110cm 以上200cm 未満の身長でしか計算できません」と表示されるのですが、これはどこが違っているのですか?違っていたら例としてどのように直したらいいのか教えてください。 class Student { private double height; private double weight; private double bmi; public void calculate(double ht, double wt) { if(ht>=110 && ht<=200 && wt>=0){ height = ht; weight = wt; bmi = wt/((ht/100)*(ht/100)); System.out.println("下記の学生のBMI体格指数を計算します。"); System.out.println( ht+"cm, "+wt+"kgの学生"); System.out.println("計算結果:BMIの体格指数は"+bmi+"kg/m2です。"); } else if(!(ht>=110 && ht<=200)){ System.out.println("入力エラー3:身長データ"+ht+"cm"); System.out.println("110以上200cm未満の身長でしか計算できませ                     ん。"); } else if(!(wt>0)){ System.out.println("入力エラー2:体重データ"+wt+"kg"); System.out.println(" 0kgより重い体重でしか計算できません。"); } else{ System.out.println("入力エラー1:身長データ"+ht+"cmと体重デー                                タ"+wt+"kg"); System.out.println("110以上200cm未満の身長で、 0kgより重い体重でし                             か計算できません。"); } } } class KNO { public static void main(String args[]) { Student student1 = new Student(); student1.calculate(170.5, 62.3); student1.calculate(205.6, -85.9); student1.calculate(200.8, 102.6); student1.calculate(108.4, 20.9); student1.calculate(165.5, -52.7); } }

    • ベストアンサー
    • Java
  • 構文がエラーになる

    Exception in thread"main"java.lang.NoClassDefFoundError という文章でエラーになります。 import java.io.*; class Sample34 { public static void main (String args[])throws IOException { System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if(res == 1){ System.out.println("1が入力されました。"); } else if(res == 2){ System.out.println("2が入力されました。"); } else{ System.out.println("1か2を入力してください。"); } } }

  • Javaの課題について質問です。パート(2)

    import java.io.Console; public class A23_exec { public static void main(String args[]){ try{ A23_StrArray list = new A23_StrArray(); System.out.println("-------------------------------処理メニュー-------------------------------"); System.out.println("| 01・・・要素を追加 02・・・指定のインデックスの要素を上書き|"); System.out.println("| 03・・・指定インデックスの要素を表示 04・・・全ての要素を削除 |"); System.out.println("| 05・・・全ての要素を表示 06・・・全てのインデックス数を表示 |"); System.out.println("| 07・・・全ての要素を昇順でソート 08・・・全ての要素を降順でソート |"); System.out.println("| 09・・・ファイルの読込み 10・・・ファイルを追記して読込み |"); System.out.println("| 11・・・ファイルを上書きして読込み 12・・・ファイルに書込み |"); System.out.println("| 13・・・ファイルに追記して書込み 14・・・ファイルに上書き書込み |"); System.out.println("| 99・・・処理を終了 |"); System.out.println("--------------------------------------------------------------------------"); System.out.println(" ※処理メニュー以外のNoを入力しても処理出来ませんので注意して下さい。"); System.out.println(" ※全て半角英数字で入力して下さい。"); System.out.println(" ↓処理Noを入力して下さい。↓"); while(true){ System.out.println("-----処理No-----"); String inputData = input(); if(inputData.equals("99")){ System.out.println("終了"); System.exit(0); break ; } else if(inputData.equals("01")){ System.out.println("要素追加"); inputData = input(); list.add(inputData); } else if(inputData.equals("02")){ System.out.println("指定インデックスの要素の上書き"); inputData = input(); list.set(0,inputData); System.out.println(list.toString()); } else if(inputData.equals("03")){ System.out.println("指定インデックスの要素を表示"); inputData = input(); System.out.println(list.get(0)); } else if(inputData.equals("04")){ System.out.println("全ての要素を削除"); list.clear(); } else if(inputData.equals("05")){ System.out.println("全ての要素を表示"); list.getAll(); System.out.println(list.getAll()); } else if(inputData.equals("06")){ System.out.println("全てのインデックス数を表示"); int item =list.getIndex(); System.out.println(item); } else if(inputData.equals("07")){ System.out.println("全ての要素を昇順でソート"); list.sort(list.ASC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("08")){ System.out.println("全ての要素を降順でソート"); inputData = input(); list.sort(list.DESC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("09")){ System.out.println("ファイルの読み込み"); inputData = input(); list.readFile(inputData); } else if(inputData.equals("10")){ System.out.println("ファイルを追記して読み込み"); inputData = input(); list.readFile(inputData,true); } else if(inputData.equals("11")){ System.out.println("ファイルを上書きして読み込み"); inputData = input(); list.readFile(inputData,false); } else if(inputData.equals("12")){ System.out.println("ファイルに書き込み"); inputData = input(); list.writeFile(inputData); } else if(inputData.equals("13")){ System.out.println("ファイルに追記して書き込み"); inputData = input(); list.writeFile(inputData,true); } else if(inputData.equals("14")){ System.out.println("ファイルに上書きして読み込み"); inputData = input(); list.writeFile(inputData,false); } else{ System.out.println("処理Noが違います。"); } } }catch(Exception e){ System.out.println(e); } } private static String input(){ try{ Console cns = System.console(); //String input= cns.readLine(); return cns.readLine(); } catch(Exception e){ System.out.println(e); return ""; } } } 宜しくお願い致します。

専門家に質問してみよう