【发布时间】:2020-12-26 14:46:50
【问题描述】:
我有一个创建比赛的计划。 我为工厂方法创建了一个类并为每个字段生成随机值,除了我的 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 公里[汽车:型号 = 三菱,车年 = 1457,车手:[车手:姓名 = Dan,年龄 = 12,奖牌 = [Loop.classes .nir_ex.ex14_Race.Medal;@782830e,车手:姓名 = Dan,年龄 = 20,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@470e2030],汽车:型号 = 法拉利,车年 = 1831,车手: [车手:姓名 = Dan,年龄 = 37,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@3fb4f649,车手:姓名 = Dan,年龄 = 21,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal; @33833882],汽车:型号 = Mazda,车年 = 628,车手:[车手:姓名 = Dan,年龄 = 27,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@200a570f,车手:姓名 = Dan,年龄 = 19,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@16b3fc9e],汽车:型号 = 菲亚特,汽车年份 = 1002,车手:[车手:姓名 = Dan,年龄 = 19,奖牌 = [Loop. classes.nir_ex.ex14_Race.Medal;@e2d56bf,车手:姓名 = Dan,年龄 = 10,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@244038d0],汽车:型号 = 法拉利,汽车年 = 441,车手:[车手:姓名 = Dan,年龄 = 22,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@5680a178,车手:姓名 = Dan,年龄 = 24,奖牌 = [Loop.classes。 nir_ex.ex14_Race.Medal;@5fdef03a],汽车:型号 = 菲亚特,汽车年份 = 1651,车手:[车手:姓名 = Dan,年龄 = 30,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@3b22cdd0,车手:姓名 = Dan,年龄 = 16,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@1e81f4dc],汽车:型号 = Suzuki,车年 = 602,车手:[车手:姓名 = Dan,年龄 = 38 ,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@4d591d15,车手:姓名 = Dan,年龄 = 32,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@65ae6ba4],汽车:型号 = 菲亚特,车年 = 982,车手:[车手:姓名 = Dan,年龄 = 31,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@48cf768c,车手:姓名 = Dan,年龄 = 18,奖牌 = [Loop.classes .nir_ex.ex14_Race.Medal;@59f95c5d],汽车:型号 = Suzuki,车年 = 693,车手:[车手:姓名 = Dan,年龄 = 24,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@5ccd43c2 , 司机: Name = Dan, Age = 21, Medals = [Loop.classes.nir_ex.ex14_Race.Medal;@4aa8f0b4], Car: Model = Mitsubishi, Car Year = 1595, Drivers: [Driver: Name = Dan, Age = 37,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@7960847b,车手:姓名 = Dan,年龄 = 17,奖牌 = [Loop.classes.nir_ex.ex14_Race.Medal;@6a6824be]]
我需要什么
如你所见,我得到了奖牌的所有信息。
【问题讨论】:
-
这是 Java 打印数组的默认方式。在
Circuit.toString()方法中使用Arrays.toString(medals)。 -
我已经改过了,但是我有同样的问题。
-
在您显示完整的代码以重现您的问题(编辑您的问题)之前,无法进一步帮助您。
-
Medal的toString没有问题。确保您覆盖其他类的toString以最终调用奖章的toString。如前所述,使用Arrays.toString打印数组。 -
我已经编辑了所有的类,我确定我覆盖了toString,还是同样的问题。