我正在为uni创建有关注册汽车的程序。我有一个用于汽车的对象类和一个数组列表,可以将它们全部保留在中P>
我尝试将代码直接提升到主体中,并且它是相同的,并且我尝试了各种不同的小更改,例如我要比较的方式等。
这是我在汽车类文件中保留的addCar函数
public static ArrayList<Car> addCar(ArrayList<String> Makes, Integer CarCounter, ArrayList<Car> Cars) {
Integer Select;
boolean Equal = false;
for (int i = 0; i < Makes.size(); i++) {
System.out.println(i + ": " + Makes.get(i));
}
Scanner choice = new Scanner(System.in);
{
System.out.println("Enter Numeric Choice: ");
while (!choice.hasNextInt()) {
System.out.println("Error Please Enter Numeric Choice Again: ");
choice.next();
}
Select = choice.nextInt();
}
if (Select >= Makes.size()) {
System.out.println("No records exist (Number entered too large)");
} else {
for (int i = 0; i < Makes.size(); i++) {
if (Equal = Makes.get(i).equals(Makes.get(Select))) {
break;
}
}
if (Equal == true) {
Car newCar;
Make = Makes.get(Select);
Reg = Input.getString("What is the registration: ");
Model = Input.getString("What is the Model: ");
Colour = Input.getString("What is the Colour: ");
newCar = new Car();
newCar.setMake(Make);
newCar.setReg(Reg);
newCar.setModel(Model);
newCar.setColour(Colour);
Cars.add(CarCounter, newCar);
} else {
System.out.println("Make is unavailable Please Try Again");
}
}
return Cars;
}
这是在主文件的主体中声明ArrayList的行
ArrayList<Car> Cars = new ArrayList<Car>();
在我的Switch Case菜单中为其中一个案例调用函数的行
Cars = Car.addCar(Makes, CarCounter, Cars);
例如,如果我将第一辆车设置为fiat,L4QWS,Punto,Silver
,将第二辆车设置为Ferrari,4RE33,LaFerrari,Red
,则应该是:
Car 1:
Make: fiat
Registration: L4QWS
Model: Punto
Colour: Silver
Car 2:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red
但是,实际上是:
Car 1:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red
Car 2:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red
可能永远不会增加 CarCounter
,因此在调用 Cars.add(CarCounter, newCar)
时,您总是始终覆盖列表中的第一个(和唯一(项目。您根本不需要CarCounter
,因为它是多余的Cars.size()
。对于将项目添加到列表中,只需使用Cars.add(newCar)
肯定会将其添加到列表的末尾即可。谈到Integer
参数:您不仅是通过使用Integer
而不是int
来调用该方法,因此出于性能原因,您应该更喜欢原始类型的int
。在一些极少数情况下,您确实想通过Integer
对象。而且,如果您真的想要通过引用传递整数,则将其包装到数组中,或者使用某些包装程序类,例如AtomicInteger
。
问题是汽车类的数据成员定义为static
。这意味着在汽车类的所有实例之间共享此类数据成员的副本。
所以,当您创建新车并设置其价值时,它们会通过所有汽车出现。
一般而言,静态数据应该是例外,而不是规则。关于创建班级单独实例的重点是它们应该确实是分开的。