如何使arraylist在Java中保持一致

时间:2018-06-25 06:06:15

标签: java arraylist

如何使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));

请帮助我解决这个问题。

2 个答案:

答案 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)

您需要考虑很多错误和问题:

  • 我认为您不了解迭代器的工作方式。它们通常是非常短期的变量:声明,迭代,处置。持久迭代器有一些用例,但这不是其中之一。
  • 实际上,如今这些天通常不需要显式迭代器:您可以在大多数情况下使用for-each或8080
  • 您的逻辑似乎暗示列表中只能有一个具有给定“插槽”的车辆。如果是这样的话,有更好的方法可以解决这个问题:

使用地图存储您的广告位:

Stream

检查流:

Map<Integer,Vehicle> slotMap;