簡體   English   中英

無法找出方法的參數

[英]Can't figure out arguments for method

我有一個學校任務,其中我必須創建一個代碼,該代碼創建並填充一個數組,然后使用這些數據。 我必須計算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();
    }
}

由於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. 遍及所有人
  2. 計算他們的BMI
  3. 確定BMI是否正常
  4. 如果是這樣,請打印他們的名字


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

您的程序中還有另一個錯誤,那就是BMI總是被計算為零。 這是因為在以下方法中您正在執行整數除法

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

除此之外,BMI是使用以米為單位的高度來計算的。 您似乎已存儲了以厘米為單位的高度。 因此,您所有的BMI值都非常小(小於1)。

您應該在循環外部而不是內部實例化對象,為簡單起見,請使用getters(如果您不了解getter,則使用Google)將arraylist傳遞給BMI方法,現在使用for循環計算每個人的bmi。 您並不是只計算一個人的體重指數。 對? 這就是為什么需要for循環的原因。 通過公式計算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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM