2 Stimmen

Java erzeugt Zufallsobjekte [Hausaufgabe]

Ok, ich habe den statischen Fehler behoben. Jetzt versuche ich nur noch herauszufinden, warum ich für jedes Objekt die gleichen Einträge erhalte (d.h. gleicher Name, Alter, Gewicht, etc.). Hier ist der Code:

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);
        }
    }
}

Ich sollte zufällige Einträge erhalten, aber ich erhalte nur einen. Hier ist die Ausgabe:

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

1voto

Dave Webb Punkte 184809

Wenn Sie zum Beispiel das Gewicht betrachten, erzeugen Sie ein Zufallsgewicht wie folgt:

double weight = loadRandomWeights(a);

Diese Daten werden dann an den Code übergeben, der das Array füllt:

createObjectsToFillArray(BodyMassIndex[] data, String name, int age, double weight, double height, int numberOfPeople) 

Dies führt zu einer Reihe von Schleifen:

for (int i = 0; i < numberOfPeople; i++) 
    data[i] = new BodyMassIndex(name, age, weight, height);

Ihr Problem ist also, dass bei jeder Iteration der Schleife derselbe Zufallswert verwendet wird. Sie müssen einen neuen Zufallswert generieren innerhalb der Schleife so dass jeder Eintrag im Array einen anderen Wert erhält:

for (int i = 0; i < numberOfPeople; i++) {
    double weight = loadRandomWeights();
    ....
    data[i] = new BodyMassIndex(name, age, weight, height);
}

Dasselbe gilt natürlich auch für die anderen Werte; auch für sie müssen Sie innerhalb der Schleife Werte generieren.

Und Sie haben den gleichen Fehler in Ihrem printArray Methode. Sie druckt denselben Wert erneut aus, anstatt ihn aus den von Ihnen erstellten Objekten zu lesen. In dieser Methode lesen Sie die Werte aus Ihren BodyMassIndex Objekte.

Außerdem glaube ich nicht, dass Ihr loadRandomWeights() Methode andere ähnliche braucht eine data Parameter, da Sie weder in das Array schreiben noch daraus lesen, das Sie übergeben:

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;
}

Das könnte einfach sein:

public static double generateRandomWeight() {
    double min = 100;
    double max = 300;
    return randomInt(min, max);
}

0voto

Mikey3Strings Punkte 109

Versuchen Sie es für jede for-Schleife:

    for (int row = 0; row < data.length; row++) {
    double weight = randomInt(min, max);

    return weight;

    }
}

Was ist mit

Versuchen Sie es für jede for-Schleife:

    for (int row = 0; row < data.length; row++) {
    double weight = randomInt(min, max);

    }
    return weight;

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X