У меня есть задание создать расу. Я создал класс для фабричных методов и генерировал случайные значения для каждого поля, похоже, все работает нормально, кроме моей информации 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]]
Что мне нужно
как видите, я получаю всю информацию, кроме медалей.
Я изменил его, но у меня та же проблема.
Не могу помочь вам, пока вы не покажете полный код, чтобы воспроизвести вашу проблему (отредактируйте свой вопрос).
Нет ничего плохого в toString
из Medal
. Убедитесь, что вы переопределяете toString
других классов, чтобы в конечном итоге вызвать toString Медали. Как сказано, используйте Arrays.toString
для печати массивов.
Я отредактировал все классы, я убедился, что переопределяю toString, все та же проблема.
Вы не сделали, как было предложено, и использовали Arrays.toString для печати массивов.
Проблема в классе 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. Используйте
Arrays.toString(medals)
внутри методаCircuit.toString()
.