Java OOP - проблема с печатью информации о составных компонентах

У меня есть задание создать расу. Я создал класс для фабричных методов и генерировал случайные значения для каждого поля, похоже, все работает нормально, кроме моей информации MEDAL. при создании гонки я получаю все строковые значения, кроме «Медали», и, похоже, не могу найти причину этого.

Мой код

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

}

что я получаю

Трасса: Название трассы: USARaceOpen, Страна: США, Длина трассы: 13 километров[Автомобиль: Модель = Mitsubishi, Год выпуска = 1457, Водители: [Водитель: Имя = Дэн, Возраст = 12, Медали = [Loop.classes.nir_ex. ex14_Race.Medal;@782830e, Водитель: Имя = Дэн, Возраст = 20, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@470e2030], Автомобиль: Модель = Ferrari, Год выпуска автомобиля = 1831, Водители: [Водитель: Имя = Дан, Возраст = 37, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@3fb4f649, Водитель: Имя = Дэн, Возраст = 21, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@33833882] , Автомобиль: Модель = Mazda, Год автомобиля = 628, Водители: [Водитель: Имя = Дан, Возраст = 27, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@200a570f, Водитель: Имя = Дэн, Возраст = 19 , Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@16b3fc9e], Автомобиль: Модель = Fiat, Год выпуска = 1002, Водители: [Водитель: Имя = Дэн, Возраст = 19, Медали = [Loop.classes.nir_ex .ex14_Race.Medal;@e2d56bf, Водитель: Имя = Дэн, Возраст = 10, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@244038d0], Автомобиль: Модель = Ferrari, Год выпуска автомобиля = 441, Водители: [Водитель : Имя = Дан, Возраст = 22, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@5680a178, Водитель: Имя = Дэн, Возраст = 24, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@5fdef03a ], Автомобиль: Модель = Fiat, Год автомобиля = 1651, Водители: [Водитель: Имя = Дэн, Возраст = 30, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@3b22cdd0, Водитель: Имя = Дэн, Возраст = 16, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@1e81f4dc], Автомобиль: Модель = Suzuki, Год выпуска = 602, Водители: [Водитель: Имя = Дэн, Возраст = 38, Медали = [Loop.classes. nir_ex.ex14_Race.Medal;@4d591d15, Водитель: Имя = Дэн, Возраст = 32, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@65ae6ba4], Автомобиль: Модель = Fiat, Год выпуска автомобиля = 982, Водители: [ Водитель: Имя = Дан, Возраст = 31, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@48cf768c, Водитель: Имя = Дан, Возраст = 18, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@ 59f95c5d], Автомобиль: Модель = Suzuki, Год выпуска автомобиля = 693, Водители: [Водитель: Имя = Дан, Возраст = 24, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@5ccd43c2, Водитель: Имя = Дэн, Возраст = 21, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@4aa8f0b4], Автомобиль: Модель = Mitsubishi, Год выпуска = 1595, Водители: [Водитель: Имя = Дэн, Возраст = 37, Медали = [Loop.classes .nir_ex.ex14_Race.Medal;@7960847b, Водитель: Имя = Дэн, Возраст = 17, Медали = [Loop.classes.nir_ex.ex14_Race.Medal;@6a6824be]]

Что мне нужно

как видите, я получаю всю информацию, кроме медалей.

Это стандартный способ печати массивов в Java. Используйте Arrays.toString(medals) внутри метода Circuit.toString().

Reto Höhener 26.12.2020 15:52

Я изменил его, но у меня та же проблема.

user13305415 26.12.2020 15:55

Не могу помочь вам, пока вы не покажете полный код, чтобы воспроизвести вашу проблему (отредактируйте свой вопрос).

Reto Höhener 26.12.2020 15:56

Нет ничего плохого в toString из Medal. Убедитесь, что вы переопределяете toString других классов, чтобы в конечном итоге вызвать toString Медали. Как сказано, используйте Arrays.toString для печати массивов.

Thiyagu 26.12.2020 15:59

Я отредактировал все классы, я убедился, что переопределяю toString, все та же проблема.

user13305415 26.12.2020 16:11

Вы не сделали, как было предложено, и использовали Arrays.toString для печати массивов.

tgdavies 27.12.2020 13:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
6
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в классе 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]]]]

Другие вопросы по теме