好的,我修复了静态错误。现在我只想找出为什么我为每个对象获得相同的条目(即同名,年龄,体重等)。这是代码:
package classlab3b;
import classlab3B.BodyMassIndex;
import java.text.DecimalFormat;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author ccity
*/
public class ClassLab3B {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Please enter the number of people:");
//asks user to input number of people
int numberOfPeople;
//declares integer variable for number of people
Scanner input = new Scanner(System.in);
//creates system input scanner
numberOfPeople = input.nextInt();
//captures user input for number of people
BodyMassIndex[] a = new BodyMassIndex[numberOfPeople];
//creates an array of BodyMassIndex the size of numberOfPeople
String name = loadRandomNames(a);
//loads object with random name
int age = loadRandomAges(a, numberOfPeople);
//loads object with random age
double weight = loadRandomWeights(a);
//loads object with random weight
double height = loadRandomHeights(a);
//loads object with random height
createObjectsToFillArray(a, name, age, weight, height, numberOfPeople);
//creates "x" objects to fill the array
double BMI = BodyMassIndex.getBodyMassIndex();
//gets BMI from getBodyMassIndex method in BodyMassIndex.java
String status = BodyMassIndex.getStatus();
//gets status from getStatus method in BodyMassIndex.java
//double BMI = BodyMassIndex.bmix.getBodyMassIndex();
//String status = BodyMassIndex.bmix.getStatus();
printArray(a, name, age, weight, height, BMI, status);
//prints array
System.out.println(" ");
System.out.println("Current Population");
System.out.println(" ");
System.out.println("Obese: " + BodyMassIndex.numberOfObese);
System.out.println("Overweight: " + BodyMassIndex.numberOfOverweight);
System.out.println("Normal: " + BodyMassIndex.numberOfNormal);
System.out.println("Underweight: " + BodyMassIndex.numberOfUnderweight);
System.out.println("================");
System.out.println("Total: " + BodyMassIndex.totalNumberOfPeople);
}
public static void createObjectsToFillArray(BodyMassIndex[] data, String name, int age, double weight, double height, int numberOfPeople) {
for (int i = 0; i < numberOfPeople; i++)
data[i] = new BodyMassIndex(name, age, weight, height);
//creates new BodyMassIndex objects with generated variables from methods within
}
public static String loadRandomNames(BodyMassIndex[] data) {
String[] arrayOfFirstNames = {"Joe", "Donna", "Ronald", "Sarah", "David", "Courtney", "Irwin", "Linda", "Michael", "Cindy", "Tom", "Rebekah", "Todd", "Tracy", "Peter", "Nicole", "Marcelo", "Jennifer", "Rick", "Andrea", "Bruce", "Jaclyn", "Doug", "Shirley", "Steve", "Liz", "Waldo", "Theresa", "Scott", "Colby", "Beth", "Larry", "Emily", "Paul", "Kate", "Sam", "Dianne", "Dustin", "Alethea", "Wayne", "Kristina", "Christian", "Danny", "Breya", "Andrew", "Alison", "Tim", "Mary", "Chris", "Susie", "Jeremy", "Willy", "Jessica", "Marcus", "Kelly", "Kyle", "Stephanie", "Isaiah", "Hillary", "Eric", "Julia", "Donald", "Meredith", "Kevin", "Leslie", "Blake", "Angela", "Cliff", "Debbie", "Dylan", "Erin", "Alex", "Monica", "Nathan", "Wendy", "Josh", "Megan", "Adam", "Michelle", "Carey", "Ashley", "Brian", "Jason", "Melanie", "Jim", "Monica", "Jamie", "Rhonda", "Steven", "Perry", "Byron", "Laura", "Harry", "Brooke", "Drew", "Vicki", "Gary", "Anita", "Felipe", "Josie"};
String[] arrayOfLastNames = {"Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson", "Moore", "Taylor", "Washington", "Jefferson", "Lincoln", "Hamilton", "Jackson", "Grant", "Franklin", "McKinley", "Cleveland", "Madison", "Chase", "Nicholson", "Fauver", "Doe", "Southard", "Schmidt", "Hodson", "McDonald", "Stickley", "Miller", "Combs", "Bohus", "Krippner", "Amtower", "Banks", "Wallace", "Bannister", "Dehaven", "Yost", "Still", "Timbrook", "Peters", "Vaught", "Shellhammer", "Andrews", "Krippner", "McAlister", "Wright", "Kensinger", "McClellan", "Ganoe", "Shiley", "Layman", "Gearhart", "Yost", "Kushnir", "Bush", "Lowder", "Connolly", "Lowman", "Terveen", "Staton", "Settle", "Tinsman", "Nichols", "Baker", "Walters", "Dawe", "Renner", "Michaels", "Faircloth", "Looker", "Hastings", "Vaughan", "Anderson", "Zimmerman", "Deere", "Daher", "Lauck", "Stottlemyer", "Clinton", "Obama", "Reagan", "Montgomery", "Pugh", "Gavis", "Clark", "Bowers"};
String first = get(arrayOfFirstNames);
String last = get(arrayOfLastNames);
String name = first + " " + last;
return name;
}
public static String get(String[] array) {
Random generator = new Random();
int rnd = generator.nextInt(array.length);
return array[rnd];
}
public static int loadRandomAges(BodyMassIndex[] data, int numberOfPeople) {
double min = 13;
double max = 99;
int age = 0;
for (int i = 0; i < numberOfPeople; i++)
age = (int) randomInt(min, max);
return age;
}
public static double randomInt(double min, double max) {
double random = (double) ((max - min + 1) * Math.random() + min);
return random;
}
public static double loadRandomWeights(BodyMassIndex[] data) {
double min = 100;
double max = 300;
double weight = randomInt(min, max);
for (int row = 0; row < data.length; row++) {
}
return weight;
}
public static double loadRandomHeights(BodyMassIndex[] data) {
double min = 55;
double max = 80;
double height = randomInt(min, max);
for (int row = 0; row < data.length; row++) {
}
return height;
}
public static void printArray(BodyMassIndex[] data, String name, int age, double weight, double height, double BMI, String status) {
System.out.println(" Name " + "Age " + "Height " + "Weight " + "BMI " + "Status");
for (int i = 0; i < data.length; i++) {
DecimalFormat format = new DecimalFormat();
format.setMinimumFractionDigits(2);
format.setMaximumFractionDigits(2);
System.out.println(name + " " + age + " " + format.format(height) + " " + format.format(weight) + format.format(BMI) + " " + status);
}
}
}
我应该得到随机的条目,但我只得到一个。这是输出:
run:
Please enter the number of people:
4
Name Age Height Weight BMI Status
Courtney Anderson 81 79.64 155.0717.19 underweight
Courtney Anderson 81 79.64 155.0717.19 underweight
Courtney Anderson 81 79.64 155.0717.19 underweight
Courtney Anderson 81 79.64 155.0717.19 underweight
Current Population
Obese: 0
Overweight: 0
Normal: 0
Underweight: 1
================
Total: 4
答案 0 :(得分:1)
以权重为例,您可以按如下方式生成随机权重:
double weight = loadRandomWeights(a);
然后将其传递给填充数组的代码:
createObjectsToFillArray(BodyMassIndex[] data, String name, int age, double weight, double height, int numberOfPeople)
然后循环多次:
for (int i = 0; i < numberOfPeople; i++)
data[i] = new BodyMassIndex(name, age, weight, height);
所以你的问题是循环的每次迭代都使用相同的随机值。您需要在循环中生成新的随机值,以便数组中的每个条目获得不同的值:
for (int i = 0; i < numberOfPeople; i++) {
double weight = loadRandomWeights();
....
data[i] = new BodyMassIndex(name, age, weight, height);
}
显然,同样适用于其他值;你也需要在循环中为它们生成值。
您的printArray
方法中存在相同的错误。它重新打印相同的值,而不是从您创建的对象中读取它。在该方法中,从BodyMassIndex
个对象中读取值。
此外,我认为您的loadRandomWeights()
方法其他类似方法不需要data
参数,因为您既没有写入或读取您传入的数组:
public static double loadRandomWeights(BodyMassIndex[] data) {
double min = 100;
double max = 300;
double weight = randomInt(min, max);
for (int row = 0; row < data.length; row++) {
}
return weight;
}
这可能只是:
public static double generateRandomWeight() {
double min = 100;
double max = 300;
return randomInt(min, max);
}
答案 1 :(得分:0)
尝试使用erach for loop:
for (int row = 0; row < data.length; row++) {
double weight = randomInt(min, max);
return weight;
}
}
怎么样?
尝试使用erach for loop:
for (int row = 0; row < data.length; row++) {
double weight = randomInt(min, max);
}
return weight;
}