Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在添加ArrayList中的元素之前,检查该元素的ID是否已存在_Java - Fatal编程技术网

Java 在添加ArrayList中的元素之前,检查该元素的ID是否已存在

Java 在添加ArrayList中的元素之前,检查该元素的ID是否已存在,java,Java,我是Java的初学者,我想创建一个小型停车系统。该系统有四个类,一个用于用户输入,一个带有ArrayList维护停车位列表,一个停车场和一辆车 目前,我正在努力找出如何将插槽ID的用户输入与ArrayList中现有的插槽ID进行比较。此时,如果用户输入一个现有值,它将覆盖它 我在addParkingSLot方法中添加了条件“if(!slots.contains(newId)),但它似乎不起作用 应用程序类中负责用户ID输入的部分: choice = scanner.nextInt(); scan

我是Java的初学者,我想创建一个小型停车系统。该系统有四个类,一个用于用户输入,一个带有ArrayList维护停车位列表,一个停车场和一辆车

目前,我正在努力找出如何将插槽ID的用户输入与ArrayList中现有的插槽ID进行比较。此时,如果用户输入一个现有值,它将覆盖它

我在addParkingSLot方法中添加了条件“if(!slots.contains(newId)),但它似乎不起作用

应用程序类中负责用户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");
        }
    }
公共级停车场{
专用阵列列表插槽;
公众停车场(){
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>