Java OOP-打印组合bean信息的问题

Java OOP-打印组合bean信息的问题,java,class,oop,Java,Class,Oop,我有一个任务去创造一个种族。 我为工厂方法创建了一个类,并为每个字段生成随机值,对于我的奖牌信息来说,一切似乎都很好。在生成比赛时,除了“奖牌”之外,我得到了所有的字符串值,我似乎找不到原因 我的代码 public class RaceUtils { // Create new Medals Method public static Medal generateMedals() { int position = (int) ((Math.random() * 3) + 1);

我有一个任务去创造一个种族。 我为工厂方法创建了一个类,并为每个字段生成随机值,对于我的奖牌信息来说,一切似乎都很好。在生成比赛时,除了“奖牌”之外,我得到了所有的字符串值,我似乎找不到原因

我的代码

 public class RaceUtils {

// Create new Medals Method
public static Medal generateMedals() {
    int position = (int) ((Math.random() * 3) + 1);

    Medal medal = new Medal(position, "1500");
    return medal;

}

// Create new Driver Method
public static Driver generateDriver() {
    Medal[] medals = new Medal[4];
    int age = (int) (Math.random() * 30) + 10;
    for (int i = 0; i < medals.length; i++) {
        medals[i] = generateMedals();

    }
    
    return new Driver("Dan", age, medals);

}

// Create new Car Method
public static Car generateCar() {
    Driver[] drivers = new Driver[2];
    for (int i = 0; i < drivers.length; i++) {
        drivers[i] = generateDriver();

    }

    CarModels carModels = CarModels.values()[(int) (Math.random() * CarModels.values().length)];
    int year = (int) (Math.random() * 1990 - 2000) + 1990;

    return new Car(carModels, year, drivers);

}

// Create new Circuit Method
public static Circuit generateCircuit() {
    Car[] cars = new Car[10];
    for (int i = 0; i < cars.length; i++) {
        cars[i] = generateCar();

    }
    CircuitName names = CircuitName.values()[(int) (Math.random() * CircuitName.values().length)];
    Country country = Country.values()[(int) (Math.random() * Country.values().length)];
    int length = (int) (Math.random() * 30) + 10;

    return new Circuit(names, country, length, cars);

}

// Print Method
public static void print(Circuit[] circuit) {
    for (int i = 0; i < circuit.length; i++) {
        System.out.println(circuit[i].toString());

    }
}



public class Medal {

private int position;
private String string;

public Medal(int position, String string) {
    setPosition(position);
    this.string = string;
}

public int getPosition() {
    return position;
}

public void setPosition(int position) {
    if (this.position > 0 || this.position <= 3) {
        this.position = position;
    } else {
        System.out.println("Position is out of range");
    }
}

public String getString() {
    return string;
}

public void setString(String string) {
    this.string = string;
}

@Override
public String toString() {
    return "Medal [position=" + position + ", string=" + string + "]";
}


  public class Driver {

private String name;
private int age;
private Medal[] medals;

public Driver(String name, int age, Medal[] medals) {
    this.name = name;
    this.age = age;
    this.medals = medals;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public Medal[] getMedals() {
    return medals;
}

public void setMedals(Medal[] medals) {
    this.medals = medals;
}

@Override
public String toString() {
    return "Driver: Name = " + name + ", Age = " + age + ", Medals = " + medals;
}





public class Car {

private CarModels models;
private int year;
private Driver[] drivers;

public Car(CarModels models, int year, Driver[] drivers) {
    this.models = models;
    this.year = year;
    this.drivers = drivers;
}

public CarModels getModels() {
    return models;
}

public void setModels(CarModels models) {
    this.models = models;
}

public int getYear() {
    return year;
}

public void setYear(int year) {
    this.year = year;
}

public Driver[] getDrivers() {
    return drivers;
}

public void setDrivers(Driver[] drivers) {
    this.drivers = drivers;
}

@Override
public String toString() {
    return "Car: Model = " + models + ", Car Year = " + year + ", Drivers: " + Arrays.toString(drivers);
}





public class Circuit {

private CircuitName names;
private Country country;
private int length;
private Car[] cars;

public Circuit(CircuitName names, Country country, int length, Car[] cars) {
    this.names = names;
    this.country = country;
    this.length = length;
    this.cars = cars;
}

public CircuitName getNames() {
    return names;
}

public void setNames(CircuitName names) {
    this.names = names;
}

public Country getCountry() {
    return country;
}

public void setCountry(Country country) {
    this.country = country;
}

public int getLength() {
    return length;
}

public void setLength(int length) {
    this.length = length;
}

public Car[] getCars() {
    return cars;
}

public void setCars(Car[] cars) {
    this.cars = cars;
}

@Override
public String toString() {
    return "Circuit: Circuit Name: " + names + ", Country: " + country + ", Circuit Length: " + length
            + " Kilometers" + Arrays.toString(cars);
}



public class RaceProgram {

private static final int LEN = 4;

public static void main(String[] args) {

    Circuit[] circuit = new Circuit[LEN];

    for (int i = 0; i < circuit.length; i++) {
        circuit[i] = RaceUtils.generateCircuit();

    }
    
    RaceUtils.print(circuit);
    

}
public-class-RaceUtils{
//创建新方法
公共静态奖牌生成器emedals(){
int位置=(int)((Math.random()*3)+1);
奖牌=新奖牌(位置,“1500”);
返回奖章;
}
//创建新的驱动程序方法
公共静态驱动程序generateDriver(){
奖牌[]奖牌=新奖牌[4];
int年龄=(int)(Math.random()*30)+10;
对于(int i=0;i<0.length;i++){
奖牌[i]=代币();
}
返回新驾驶员(“Dan”、年龄、奖牌);
}
//创建新车方法
公共静态汽车发电机(Car){
驱动程序[]驱动程序=新驱动程序[2];
对于(int i=0;i如果(this.position>0 | | this.position问题出在Driver类中,请尝试将方法toString更改为类似以下内容

public class Driver {
    @Override
    public String toString() {
        return "Driver: Name = " + name + ", Age = " + age + ", Medals = " + Arrays.toString(medals);
    }
}
您在所有类Array.toString中使用来显示数组的内容,但在Driver类中使用奖牌.toString

输出

Circuit: Circuit Name: null, Country: null, Circuit Length: 17 Kilometers[Car: Model = null, Car Year = 65, Drivers: [Driver: Name = Dan, Age = 12, Medals = [Medal [position=3, string=1500], Medal [position=1, string=1500], Medal [position=3, string=1500], Medal [position=1, string=1500]], Driver: Name = Dan, Age = 22, Medals = [Medal [position=1, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500], Medal [position=1, string=1500]]], Car: Model = null, Car Year = 1747, Drivers: [Driver: Name = Dan, Age = 18, Medals = [Medal [position=1, string=1500], Medal [position=1, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500]], Driver: Name = Dan, Age = 24, Medals = [Medal [position=1, string=1500], Medal [position=3, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500]]], Car: Model = null, Car Year = 1781, Drivers: [Driver: Name = Dan, Age = 18, Medals = [Medal [position=2, string=1500], Medal [position=1, string=1500], Medal [position=1, string=1500], Medal [position=3, string=1500]], Driver: Name = Dan, Age = 21, Medals = [Medal [position=2, string=1500], Medal [position=3, string=1500], Medal [position=3, string=1500], Medal [position=1, string=1500]]], Car: Model = null, Car Year = 28, Drivers: [Driver: Name = Dan, Age = 16, Medals = [Medal [position=3, string=1500], Medal [position=3, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500]], Driver: Name = Dan, Age = 39, Medals = [Medal [position=2, string=1500], Medal [position=3, string=1500], Medal [position=3, string=1500], Medal [position=3, string=1500]]], Car: Model = null, Car Year = 1789, Drivers: [Driver: Name = Dan, Age = 37, Medals = [Medal [position=1, string=1500], Medal [position=3, string=1500], Medal [position=3, string=1500], Medal [position=3, string=1500]], Driver: Name = Dan, Age = 38, Medals = [Medal [position=3, string=1500], Medal [position=2, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500]]], Car: Model = null, Car Year = 1413, Drivers: [Driver: Name = Dan, Age = 30, Medals = [Medal [position=2, string=1500], Medal [position=1, string=1500], Medal [position=1, string=1500], Medal [position=3, string=1500]], Driver: Name = Dan, Age = 18, Medals = [Medal [position=3, string=1500], Medal [position=2, string=1500], Medal [position=2, string=1500], Medal [position=1, string=1500]]], Car: Model = null, Car Year = 965, Drivers: [Driver: Name = Dan, Age = 33, Medals = [Medal [position=1, string=1500], Medal [position=1, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500]], Driver: Name = Dan, Age = 34, Medals = [Medal [position=1, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500], Medal [position=1, string=1500]]], Car: Model = null, Car Year = 1380, Drivers: [Driver: Name = Dan, Age = 38, Medals = [Medal [position=3, string=1500], Medal [position=3, string=1500], Medal [position=2, string=1500], Medal [position=3, string=1500]], Driver: Name = Dan, Age = 16, Medals = [Medal [position=1, string=1500], Medal [position=1, string=1500], Medal [position=2, string=1500], Medal [position=2, string=1500]]], Car: Model = null, Car Year = 581, Drivers: [Driver: Name = Dan, Age = 31, Medals = [Medal [position=2, string=1500], Medal [position=2, string=1500], Medal [position=1, string=1500], Medal [position=1, string=1500]], Driver: Name = Dan, Age = 34, Medals = [Medal [position=1, string=1500], Medal [position=1, string=1500], Medal [position=3, string=1500], Medal [position=3, string=1500]]], Car: Model = null, Car Year = 429, Drivers: [Driver: Name = Dan, Age = 12, Medals = [Medal [position=2, string=1500], Medal [position=2, string=1500], Medal [position=2, string=1500], Medal [position=1, string=1500]], Driver: Name = Dan, Age = 28, Medals = [Medal [position=2, string=1500], Medal [position=2, string=1500], Medal [position=1, string=1500], Medal [position=2, string=1500]]]]

这是Java默认的打印数组的方式。在
Circuit.toString()方法中使用
arrays.toString(奖牌)
。我已经更改了它,但是我也有同样的问题。在显示完整的代码以重现问题之前,无法进一步帮助您(编辑您的问题)。奖牌的
toString
没有问题。请确保您正在覆盖其他类的
toString
,以最终调用奖牌的toString。如上所述,使用
Arrays.toString
打印数组。我已经编辑了所有类,我已经确保覆盖了toString,仍然存在相同的问题。