如何使java中的ArrayList保持一致。意味着当我在一个函数中更新了ArrayList时,它就会被更新。但是,从该函数退出后,它再次将其大小设置为0。
public static ArrayList<Vehicle> al=new ArrayList<Vehicle>();
java.util.Iterator<Vehicle> itr= al.iterator();
@SuppressWarnings("unchecked")
public boolean addVehicleToSlot(Vehicle vehicle) {
if((vehicle.slotNo<=0||vehicle.slotNo>40)&&(vehicle.getVehicleType()!="Car"
||vehicle.getVehicleType()!="Truck"||vehicle.getVehicleType()!="Two Wheeler")){
new InvalidSlotException("Slot alraedy allotted");
return false;
}
int iter=0;
int len=al.size();
if(len==0){
al.add(vehicle);
return true;
}
while(iter< len){
Vehicle veh=(Vehicle)itr.next();
if(veh.getSlotNo()==vehicle.getSlotNo()){
new SlotNotFoundException("No slot allotted");
return false;
}
else{
al.add(vehicle);
for(Vehicle vehi:al){
System.out.println(al);
}
return true;
}
}
return false;
}
我的函数调用是这样:
Vehicle v1=new Vehicle(o1,"ts75","Truck",37,48);
ParkingManagement p1=new ParkingManagement();
System.out.println(p1.addVehicleToSlot(v1));
请帮助我解决这个问题。
答案 0 :(得分:0)
您正在class
初始化时创建一个迭代器。此时al
可能为空。留下一个空的迭代器。因为您永远不会更新迭代器。您将永远不会迭代列表,因此:列表保持为空。
因此,将iter
的使用替换为增强的for循环。另外,您似乎想throw
例外,但实际上您从未抛出过它们。最后,您要将字符串与==
进行比较,但这几乎不能用,因为==
不会检查字符串是否相等,而是检查引用。对于看起来似乎相等的两个字符串,可能并非总是如此。请改用.equals()
:
public boolean addVehicleToSlot(Vehicle vehicle) {
if((vehicle.slotNo <=0 || vehicle.slotNo > 40) && (!vehicle.getVehicleType().equals("Car") || !vehicle.getVehicleType().equals("Truck") || !vehicle.getVehicleType().equals("Two Wheeler"))){
throw new InvalidSlotException("Slot alraedy allotted");
}
if(al.isEmpty()){ // instead of al.size() == 0, just use al.isEmpty()
al.add(vehicle);
return true;
}
for(Vehicle veh : al){
if(veh.getSlotNo() == vehicle.getSlotNo()){
throw new SlotNotFoundException("No slot allotted");
} else{
al.add(vehicle);
return true;
}
}
return false;
}
答案 1 :(得分:0)
您需要考虑很多错误和问题:
8080
。使用地图存储您的广告位:
Stream
检查流:
Map<Integer,Vehicle> slotMap;