[英]Checking if the ID of an element in an ArrayList is already there before adding it
我是Java的初学者,我想创建一个小型的Parking System系统。 该系统有四个类别,一个用于用户输入,一个具有ArrayList,用于维护“停车”中的插槽列表,一个“ ParkingSlot”和“一辆汽车”。
目前,我正在努力寻找如何将用户输入的插槽ID与ArrayLis中现有的插槽ID进行比较的方法。 目前,如果用户输入现有值,它只会覆盖它。
我在addParkingSLot方法中添加了条件“ if(!slots.contains(newId))”,但它似乎不起作用。
Application类中负责用户ID输入的部分:
choice = scanner.nextInt();
scanner.nextLine();
if (choice == 1) {
System.out.println("Enter an ID of the type \"D##\"");
input = scanner.nextLine();
if(input.matches("[D][0-9][0-9]")) {
System.out.println("Nice");
carParkObj.addParkingSlot(input, "Visitor", false);
}
else {
System.out.println("Invalid Input");
}
break;
停车场课程:
public class CarPark {
private ArrayList<ParkingSlot> slots;
public CarPark() {
slots = new ArrayList<ParkingSlot>();
}
/**
* storing Parking Slot
*/
public void addParkingSlot(String newId, String newType, boolean newOccupied)
{
ParkingSlot slotObj = new ParkingSlot(newId, newType, newOccupied);
if (!slots.contains(newId)) {
slots.add(slotObj);
}
else {
System.out.println("This slot ID already exists");
}
}
当用户输入现有值时,它将被添加到arrayList中,而不是收到有关插槽ID已存在的消息。
您的ArrayList
类型为ParkingSlot
,但是您正在使用.contains
的类型为String
。 无论如何它返回false
。 您可以添加新的方法来检查公园中是否有特定编号的汽车:
public boolean hasParkingSlot(String searching) {
for(ParkingSlot slot : slots) {
if(slot.getID().equals(searching)) return true;
}
return false;
}
我希望这有帮助 :)
您的slots
ArrayList包含ParkingSlot
对象,而不是String
对象,因此您实际上在寻找的是字符串形式的停车位,并且没有这样的东西(俗称“比较苹果和橘子”)。
用老式的方式,你可以写
boolean found = false;
for (ParkingSlot slot : slots) {
if (slot.id.equals(newId)) {
found = true;
break;
}
}
if (found) …
(我假设ParkingSlot
有一个名为id
的可访问字段,但是您没有显示停车位的定义。尽管如此,即使它不是我编写的方式,您也可以看到它的意图。)
如用户Vega TV的另一个答案所建议,将代码包装为单独的方法是一个好主意。
有更多简洁的方法可以编写此代码,但我建议采用这种方法,因为我认为以较小的步骤对初学者有所帮助。
一种更简洁的方法是使用流设施:
boolean found = slots.stream().anyMatch(slot -> slot.id.equals(newId));
我没有实际尝试输入,所以请记住这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.