2017-12-11 17 views
-1

私は、アレイを作成して塗りつぶした後、それらのデータを使ってコードを作成するという学校の仕事があります。私はBMIを計算し、BMIが正常で、BMIが正常である人の名前をコンソールに出力する必要があるかどうかを判断する必要があります。メソッドの引数を見つけることができません

私が立ち往生しているのは、名前を出力するメソッドを呼び出すときに、正しい引数が何であるかを知ることができません。他の問題があるかもしれませんが、その場合も私を修正してください。ここで

は私のコードです:

import java.util.ArrayList; 
import java.util.Random; 
import java.util.Scanner; 

class TreatedPerson { 

    String name = ""; 
    int age; 
    int height; 
    int weight; 

    @Override 
    public String toString() { 
     return "Name: " + name + " \tAge: " + age + " \tHeight: " + height + " \tWeight: " + weight; 
    } 
} 

public class B1 { 

    static void fillTreatedPerson(ArrayList<TreatedPerson> treatedpeople, int db) { 
     Random rnd = new Random(); 
     for (int i = 0; i < db; i++) { 
      TreatedPerson tp = new TreatedPerson(); 
      tp.name = ("Szemely_" + (i + 1)); 
      tp.age = rnd.nextInt(99 - 10 + 1) + 10; 
      tp.height = rnd.nextInt(200 - 150 + 1) + 150; 
      tp.weight = rnd.nextInt(150 - 40 + 1) + 40; 
      treatedpeople.add(tp); 
     } 
    } 

    static void outputTreatedPerson(ArrayList<TreatedPerson> treatedpeople) { 
     for (TreatedPerson tp : treatedpeople) { 
      System.out.println(tp); 
     } 
    } 

    static double BMI(TreatedPerson tp) { 
     return tp.weight/(tp.height * tp.height); 
    } 

    static boolean normalBMI(double bmi) { 
     boolean bmindex = false; 
     if (bmi > 18.5 && bmi < 24.99) { 
      return bmindex = true; 

     } 
     return bmindex; 
    } 

    static void ifnormalBMI(TreatedPerson tp, boolean normalBMI) { 
     if (normalBMI) { 
      System.out.println(tp.name); 
     } 
    } 

    public static void main(String[] args) { 
     ArrayList<TreatedPerson> treatedpeople = new ArrayList<>(); 
     fillTreatedPerson(treatedpeople, 5); 
     outputTreatedPerson(treatedpeople); 
     ifnormalBMI(); 
    } 
} 
+0

BMIとは –

+1

これは体質指数です –

+0

あなたの問題は何か分かりません。あなたのメソッドはリストや人をとり、リストや人と呼んでいます...どこかでエラーが出ますか? – azurefrog

答えて

1

ifnormalBMIは、引数として1 TreatedPersonと1 booleanがかかるので、あなたが通常のBMIを持つ人の名前を印刷するループでそれを呼び出す必要があります。このような何か:

for (TreatedPerson tp : treatedpeople) { 
    double bmi = BMI(tp); 
    boolean normal = normalBMI(bmi); 
    ifnormalBMI(tp, normal); 
} 

あなただけのmain方法では1行でそれを呼び出す必要がありますように、あなたはこのoutputTreatedPersonと同様の方法作ることができます。

static boolean normalBMI(double bmi) { 
    boolean bmindex = false; 
    if (bmi > 18.5 && bmi < 24.99) { 
     return bmindex = true; 

    } 
    return bmindex; 
} 

あなたが戻っているbooleanbooleanある条件に基づいて:私はあなたのコードで表示さ


もう一つの問題は、この方法です。 if文をまったく実行する必要はありません。その全体の方法は、あなたがすべき

static boolean normalBMI(double bmi) { 
    return (bmi > 18.5 && bmi < 24.99); 
} 
1

に減らすことができます。

  1. ループのすべての人の上に
  2. 自分のBMI
  3. はBMIが
  4. そうであれば正常であるか否かを判断し計算し、印刷彼らの名前


for (TreatedPerson person : treatedpeople) 
{ 
    double bmi = BMI(person); 
    boolean isNormalBmi = normalBMI(bmi); 
    ifnormalBMI(person, isNormalBmi); 
} 

あなたのプログラムには、BMIが常に0と計算されるという別のバグがあります。以下の方法であなたがinteger divisionを実行しているので、それは次のとおりです。

static double BMI(TreatedPerson tp) { 
    return tp.weight/(tp.height * tp.height); 
} 

これに加えて、BMIはメートルで、高さを使用して計算されます。身長はセンチメートルで表示されています。そのように、すべてのあなたのBMI値は、非常に小さく(1未満)出ます。

0

(uはゲッターを知らない場合はGoogleに)あなたはBMIメソッドに簡単にするために 使用ゲッター内部ループとないために外 パスのArrayListをオブジェクトをインスタンス化する必要があり、 は今、すべての人のBMIを計算するためにforループを使用します。あなたは1人の人のbmiを計算していません。右?そのために必要なループが必要です。数式でbmiを計算します。それをarraylistに保管してください。 次に、bmiの値をcheckBMIメソッドに渡します(double bmi) 再度、forループを作成します(int i = 0; I < arraylist.size(); i ++) if(arraylist.get(i).getBMI> 18)5 & & if arraylist.get(i).getBMI < 24.99) System.out println(arraylist.get(i).getName);

関連する問題