无法找出方法的论据

时间:2017-12-11 16:35:25

标签: java arrays arraylist methods arguments

我有一个学校任务,我必须创建一个代码来创建和填充数组,然后使用这些数据。我必须计算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();
    }
}

3 个答案:

答案 0 :(得分:1)

由于ifnormalBMI需要一个TreatedPerson和一个boolean作为参数,因此您必须在循环中调用它以打印出具有正常BMI的人的姓名。像这样:

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

您可以将此方法设为与outputTreatedPerson类似的方法,这样您只需在main方法的一行中调用它。

我在您的代码中看到的另一个问题是此方法:

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

    }
    return bmindex;
}

您根据条件boolean返回boolean。你根本不需要在那里做if语句。整个方法可以简化为

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

答案 1 :(得分:1)

你应该:

  1. 遍布所有人
  2. 计算他们的BMI
  3. 确定BMI是否正常
  4. 如果是,请打印他们的名字

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

    您的程序中还有另一个错误,即BMI将始终计算为零。这是因为在以下方法中您执行的是integer division

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

    除此之外,BMI是使用身高(米)计算的。您似乎以厘米为单位存储了高度。因此,您的所有BMI值都非常非常小(小于1)。

答案 2 :(得分:0)

你应该在for循环之外实例化对象,而不是在里面 使用getter是为了简单起见(谷歌,如果你不了解吸气剂) 将arraylist传递给BMI方法, 现在用循环来计算每个人的bmi。你不是只计算一个人的bmi。对?这就是为什么需要循环的原因。用公式计算bmi。并将其存储在arraylist中。 接下来,将bmi的值传递给checkBMI方法(double bmi) 再次创建for循环(int i = 0; I&lt; arraylist.size(); i ++) if(arraylist.get(i).getBMI&gt; 18.5&amp;&amp; if arraylist.get(i).getBMI&lt; 24.99) System.out println(arraylist.get(i).getName);