我有一个如下定义的课程:
公共类CarHireSystem {
private static final Car [] carList = new Car [100]; private static int carCount = 0;
在这个课程中,我有一个菜单,用户可以在其中添加新的Car。当他们选择此选项时,将提示以下内容:
System.out.print("Enter car ID: ");
String carID = sc.nextLine();
System.out.print("Enter car description: ");
String cardescription = sc.nextLine();
System.out.print("Enter hire fee: $");
Double hireFee = sc.nextDouble();
sc.nextLine();
carList[carCount] = new Car(carID,carDescription,hireFee);
carCount++;
我想要一种方法来验证输入到阵列中的车牌ID是否尚未被用户输入并输入错误信息(如果已输入)并返回主菜单。如何在不使用Hashmap的情况下执行此操作。
由于
答案 0 :(得分:0)
boolean exists = false;
for (AdventureRide ar : adventureList) {
if (ar != null && ar.getID().equals(ID)) {
exists = true;
break;
}
}
if (!exists) {
adventureList[adventureCount++] = new AdventureRide(ID, description, admissionFee);
}
迭代数组;如果存在具有相同ID的元素,则中断for
循环并设置exists
标志。然后在最后,检查是否已设置exists
标志。如果没有,则将新元素添加到数组中。
答案 1 :(得分:0)
检查它是否已经在列表中,如果没有添加它。
List<AdventureRide> list = new List();
AdventureRide ride = new AdventureRide(ID,description,admissionFee);
if(!list.contains(ride))
list.add(ride);
如果您想使用ID引用,可以使用HashMap。
HashMap<Integer, AdventureRide> = new HashMap();
AdventureRide ride = new AdventureRide(ID,description,admissionFee);
if(!hm.containsKey(ID))
hm.put(ID,ride);
答案 2 :(得分:0)
您有两个选择:
每次要输入内容时都要浏览数组,并检查数组中是否存在当前ID
。
让AdventureRide
覆盖equals
和hashCode
方法,以便两个元素具有相同的ID
时相同。完成后,将数组替换为Set<AdventureRide>
。这样可确保您的参赛作品具有唯一的ID
。
我建议你选择选项2,原因是:
equals
和hashCode
方法。Set
是动态数据结构,因此您可以在不知道事前数量的情况下添加/删除它。答案 3 :(得分:0)
您还可以使用Set<String>
来存储ID,并使用null检查调用contains()或get()。或者将AdventureRide实例存储在Map<String,AdventureRide>
中。例如:
Map<String,AdventureRide> adventureMap = new HashMap<String,AdventureRide>();
...
private static final void addNewAdventure()
{
boolean idExists = false;
System.out.print("Enter ID: ");
String id;
do {
id = sc.nextLine();
if(null != adventureMap.get(id)) {
idExists = true;
System.out.println("The ID you entered already exists.\n Please enter a new ID: ");
}
} while(idExists);
System.out.print("Enter story: ");
String description = sc.nextLine();
System.out.print("Enter fee: $");
Double admissionFee = sc.nextDouble();
sc.nextLine();
adventureMap.put(id, new AdventureRide(id,description,admissionFee));
//keep track of objects in array
adventureCount++;
}
答案 4 :(得分:0)
您可以自动生成唯一ID,而不是让用户输入它。这样,您甚至不必检查重复的ID。
在您的代码中,而不是这样做:
adventureList[adventureCount] = new AdventureRide(ID,description,admissionFee);
将其更改为:
adventureList[adventureCount] = new AdventureRide(description,admissionFee);
然后在您的AdventureRide课程中:
class AdventureRide
{
private static int count = 0;
private String id;
public AdventureRide(String desc, double adminFee){
autoGenerateID(); //Auto generate formatted ID
}
private void autoGenerateID(){
DecimalFormat fmt = new DecimalFormat("T-00000");
id = fmt.format(count++);
}
}
DecimalFormat将您的ID格式化为特定格式。这当然是可选的。
<强>输出:强>
T-00000
T-00001
T-00002
T-00003