Java 在添加ArrayList中的元素之前,检查该元素的ID是否已存在
我是Java的初学者,我想创建一个小型停车系统。该系统有四个类,一个用于用户输入,一个带有ArrayList维护停车位列表,一个停车场和一辆车 目前,我正在努力找出如何将插槽ID的用户输入与ArrayList中现有的插槽ID进行比较。此时,如果用户输入一个现有值,它将覆盖它 我在addParkingSLot方法中添加了条件“if(!slots.contains(newId)),但它似乎不起作用 应用程序类中负责用户ID输入的部分:Java 在添加ArrayList中的元素之前,检查该元素的ID是否已存在,java,Java,我是Java的初学者,我想创建一个小型停车系统。该系统有四个类,一个用于用户输入,一个带有ArrayList维护停车位列表,一个停车场和一辆车 目前,我正在努力找出如何将插槽ID的用户输入与ArrayList中现有的插槽ID进行比较。此时,如果用户输入一个现有值,它将覆盖它 我在addParkingSLot方法中添加了条件“if(!slots.contains(newId)),但它似乎不起作用 应用程序类中负责用户ID输入的部分: choice = scanner.nextInt(); scan
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");
}
}
公共级停车场{
专用阵列列表插槽;
公众停车场(){
slots=newarraylist();
}
/**
*存放停车位
*/
public void addParkingSlot(字符串newId、字符串newType、布尔值newocculated)
{
停车场slotObj=新停车场(新ID、新类型、新占用);
如果(!slots.contains(newId)){
slots.add(slotObj);
}
否则{
System.out.println(“此插槽ID已存在”);
}
}
当用户输入一个现有值时,它会被添加到arrayList中,而不是得到插槽ID已经存在的消息。您的
插槽arrayList包含停车场对象,而不是字符串对象,因此您实际上是在寻找一个字符串停车位,而没有这样的东西(俗称“比较苹果和桔子”)
用一种你可以写的老式方式
boolean found = false;
for (ParkingSlot slot : slots) {
if (slot.id.equals(newId)) {
found = true;
break;
}
}
if (found) …
(我假设停车场
有一个名为id
的可访问字段,但您没有显示停车位的定义。尽管如此,您仍然可以看到其意图,即使它与我编写的方式不完全相同。)
正如用户Vega TV在另一个答案中所建议的那样,将此代码包装为单独的方法是一个好主意
写这篇文章有更简洁的方法,但我建议用这种方法,因为我认为对于初学者来说,用这样的小步骤来完成这篇文章是很有帮助的
一种更简洁的方法是使用溪流设施:
boolean found = slots.stream().anyMatch(slot -> slot.id.equals(newId));
我没有实际尝试就键入了它,所以请记住。您的ArrayList
具有类型ParkingSlot
,但您使用的是。包含带有类型字符串的。它返回false
。您可以添加一个新方法,用于检查停车场中是否有具有特定号码的汽车:
public boolean hasParkingSlot(字符串搜索){
用于(停车场插槽:插槽){
if(slot.getID().equals(search))返回true;
}
返回false;
}
我希望这有助于:
除了这里提供的答案之外,您还可以考虑使用一个映射。然后,可以使用<代码> sLoTid < /Cord>作为密钥,检查<代码> Stutmap。CubsSKEY(SLoTID)< /C>