gpt4 book ai didi

java - 在 ArrayList 中为现有条目设置值

转载 作者:行者123 更新时间:2023-12-02 00:41:54 27 4
gpt4 key购买 nike

我想创建一个小型 parking 系统,有四个类:一个用于用户输入,一个使用 ArrayList (CarPark) 维护 parking 位列表,一个 ParkingSlot 类和一个汽车类。

用户菜单中的选项之一是将汽车停放在现有的 parking 位中。为此,用户需要输入汽车的车牌号码。接下来,汽车应该停在 parking 场,并且 ArrayList 应该更新。

首先,用户创建 ParkingSlot 作为 CarPark 中 ArrayList 的对象。该对象中包含类 Car,该类为“null”。用户界面菜单的选项允许用户将汽车停放在创建的槽位中。在这里,我很难以将汽车分配到特定插槽的方式对系统进行编程。分配后,当调用 CarPark 类中的方法 listSlots 时,汽车应该出现在槽 ID 旁边。

在 arrayList 中创建点的应用程序类的一部分:

if (choice == 1) {
System.out.println("Enter an ID of the type \"D##\"");
input = scanner.nextLine();
if(input.matches("[D][0-9]{2}")) {
if (carParkObj.hasParkingSlot(input) == false) {
carParkObj.addParkingSlot(input, "Visitor");
}
else {
System.out.println("Invalid Input. This slotID alreasy exists!");
}
break;
}
else {
System.out.println("Invalid Input");
}
break;
}

应用程序类中进行汽车注册的部分:

else if (choice == 4) {
System.out.println("Enter the car registration number of the type \"A1234\" ");
input = scanner.nextLine();
if(input.matches("[A-Z][0-9]{4}")) {
String newRegistrationNumber = input;
System.out.println("Enter owner's name");
String newOwner = scanner.nextLine();
System.out.println("Is the owner Visitor or Staff member? For enter \"V\" for Visitor or \"S\" for staff member.");
input = scanner.nextLine();
if (input.equals("V")) {
boolean staffMember = false;
Car car = new Car(newRegistrationNumber, newOwner, staffMember);
//not sure that method do I need here to add the car to the Slot with the particular ID

else {
System.out.println("Invalid Input");
}

}
else {
System.out.println("Invalid Input");
break;
}

parking 场类:

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);
slots.add(slotObj);
}

public void deleteParkingSlot(String identifier) {
Iterator<ParkingSlot> it = slots.iterator();
while(it.hasNext()) {
ParkingSlot slot = it.next();
String id = slot.getId();
if(id.equals(identifier)) {
if(slot.isOccupied() == true) {
System.out.println("Slot cannot be deleted because is occupied");
}
else {
it.remove();
}
}
}
}

public void listSlots() {
Iterator<ParkingSlot> it = slots.iterator();
while(it.hasNext())
{
System.out.println(it.next().toString());
}
}

ParkingSlot 类:

public class ParkingSlot {

private String id;
private String type;
private boolean staffMember = false;
private Car car;

public ParkingSlot(String newId, String newType, boolean staffMember) {
this.id = newId;
this.type = newType;
this.staffMember = staffMember;
this.car =null;
}

// Getters and setters

public void setOccupied(boolean staffMember) {
this.staffMember = staffMember;
}
public boolean isOccupied() {
return car != null;
}
public void parkCar(Car car) {
this.car = car;
}
public void removeCar() {
this.car = null;
}

public String toString(){
return id + "\t" + type + "\t" + staffMember + "\t" + car;
}
}

汽车类别:

public class Car {

private String registrationNumber;
private String owner;

public Car(String newregistrationNumber, String newOwner) {
// Initialize instance variables
this.registrationNumber = newregistrationNumber;
this.owner = newOwner;
}

// Setters and getters

public String toString() {
return registrationNumber + owner;
}
}

最佳答案

将汽车分配给特定槽位的快速而肮脏的方法是迭代槽位的 ArrayList,直到找到具有所需 ID 的槽位,这与删除 parking 位的方法相同。

更简洁的方法是将 parking 位存储为 Map<String, ParkingSlot> ,其中键是槽的 ID,值是槽本身。然后您只需通过 ID 即可访问该插槽。

由于 Map 的键是一组,因此这也为您提供了一种快速检查重复 ID 的方法。

关于java - 在 ArrayList 中为现有条目设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57934237/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com