限定しりとり

かなりピンチの学生です(>_<)この前質問したのですが禁止事項にひっかかったので削除ました↓↓プログラム途中マデ頑張ったのですがやっぱりわかりません。
名前、身長、体重をデータメンバとし、身長と体重のデータから肥満度を判定し、判定結果を文字列で返す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("肥満");)
( })
}
}

A 回答 (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 "肥満";
}
}
}
    • good
    • 0

学生さんなら、結構いいソースだと思いますよ。


問題点を列挙します。

・変数名
 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());
で出力はされると思われます。

んー、キーワードとして、
・インスタンス
・カプセル化
・戻り値
の部分の理解が足りないので困っておられると推測します。

ここからはご質問内容とは関係ないのですが、
ソースを提示する際に、余計な「()」は見づらいだけだと思います。
また、コンパイルエラーはもう少し減らしてから出しましょう。
このレベルのソースを作ろうとされている質問者様でしたら、
ご自分で減らす事も可能だと思います^^
    • good
    • 0

SokuteiクラスでnewしてManを呼び出していますが、これでは各値を設定しただけで、なにもアクションが帰ってきませんよね。

せっかくhantei()メソッドを作ったのですから呼び出してあげてください。あと、hantei()メソッドに返り値Stringが設定されていますが、なにもreturnしていませんね。『判定結果を文字列で返す』のであれば、sysoutで出力しないでStringで返してあげましょう。

きっとコンパイル時にたくさんのエラーが出ていることと思います。エラーの意味をきちんと理解することが大切です。
    • good
    • 0

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