ここから本文です

質問の内容が適切でなかったため、質問方法を変えて再投稿します。 JAVAでBMIの計...

ogu********さん

2019/5/2622:22:25

質問の内容が適切でなかったため、質問方法を変えて再投稿します。
JAVAでBMIの計算と肥満度を算出するプログラムを作りたいのですが、コンパイルがなかなかうまく行きません。

全文とエラーの内容は画像の通りです。どうかアドバイスをよろしくお願いします。

補足[補足]
全文です

public class BMIcalc{
public static void main(String[] args){
System.out.println("BMIを計算します");
System.out.println("まず身長を入力してください(cm)");
double height = new java.util.Scanner(System.in).nextDouble();
System.out.println("次に体重を入力してください(kg)");
double weight = new java.util.Scanner(System.in).nextDouble();
System.out.println(height);
BMI(weight, height);
}
public static String BMI(double weight,double height){
double h100 = height%100;
double BMI = weight%(h100*h100);
String type;
if(BMI < 18.5){
type = "痩せ形";
}else if(BMI >=18.5 && BMI <25){
type = "標準";
}else if(BMI >=25){
type = "肥満型";
return type;
}
System.out.println("あなたのBMIは" + BMI + "で," + type + "です.");
return BMI;
}
}

System.in,double BMI,double weight,double height,return BMI,コンパイル,in.nextDouble

閲覧数:
62
回答数:
4
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

prw********さん

2019/5/2708:02:12

>JAVAでBMIの計算と肥満度を算出するプログラム

このようにします

***

public class BMIcalc{

public static void main(String[] args){
System.out.println("BMIを計算します");
System.out.println("まず身長を入力してください(cm)");
double height = new java.util.Scanner(System.in).nextDouble();
System.out.println("次に体重を入力してください(kg)");
double weight = new java.util.Scanner(System.in).nextDouble();

double BMI = calcBMI(weight, height);
String msg = messageBMI(BMI);

System.out.println(height);
System.out.println(weight);
System.out.println("あなたのBMIは" + BMI + "で," + msg + "です.");
}

public static double calcBMI(double weight, double height){
double h100 = height/100;
double BMI = weight/(h100*h100);
return BMI;
}

public static String messageBMI(double BMI){
String msg = "";
if( BMI < 18.5 ){
msg = "痩せ形";
}else if( 18.5 < BMI && BMI <25.0 ){
msg = "標準";
}else if( 25.0 < BMI ){
msg = "肥満型";
}

return msg;
}
}

質問した人からのコメント

2019/5/29 00:09:33

どの方も親切丁寧な回答をくださり誰を選ぶか迷ったのですが、
prw********さんを選ばせていただきます。
ですが回答はどれも非常にわかりやすく、修正にとても役立ちました。皆様、回答ありがとうございました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

ikt********さん

2019/5/2720:08:59

コンパイルエラー については、既に的確な
ご回答多数なので。
その他、ぱっと見で、気になったことだけ。
余計なおせっかいかもしれませんけど。

1.
1入力毎に new Scanner する必要は、ありません。
同じ入力(System.in)から続きで複数回読む
だけなので、1オブジェクトで足ります。

Scanner in = new Scanner(System.in);
...
double height = in.nextDouble();
...
double weight = in.nextDouble();

2.
if ... else if の連鎖で、既に評価済みの
条件を何度も重複する必要は、ありません。

3.
無意味な一時ローカル変数が、多い気がします。

4.
prw********さん ご回答コードに
あるように、
・1つの仕事しかしないメソッド
に分割したほうが、人間にとって読みやすいです。

(e.g.)
...略...
        double value = calc(weight, height);
        String judge = judge(value);
        System.out.printf("あなたのBMIは %.1f, %s です.%n", value, judge);
    }

    private static double calc(double weight, double height) {
        double h = height / 100;
        return weight / (h * h);
    }

    private static String judge(double value) {
        if (value < 18.5)
            return "痩せ型";
        else if (value < 25.0)
            return "標準";
        else
            return "肥満型";
    }

プロフィール画像

カテゴリマスター

rp0********さん

2019/5/2701:17:44

メソッドの定義箇所
public static ★String★ BMI(double weight,double height)
★で囲ってる箇所が戻り値の型定義です。
なので、このメソッドは文字列(String)をreturnしないといけないです。
ですが、メソッドの末尾でreturn BMI;としていますね。
BMIは、doubleで定義しているため、戻り値の型として正しくない。
というエラー文です。

なので、doubleをStringに変換すれば解決します。
具体的には
return BMI;を以下に書き換えればよいです。
return String.valueOf(BMI);

気になったのですが、BMIの式を間違えています。
javaの割り算は「/」ですが、質問者さんのコードは「%」を使用しています。
「%」は剰余算なので、割算ではないです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

nor********さん

2019/5/2622:34:17

public static String BMI(

double BMI

return BMI;

としているから。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる