唯一用户输入数组列表

时间:2015-08-19 07:06:11

标签: java arrays

我有一个如下定义的课程:

公共类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的情况下执行此操作。

由于

5 个答案:

答案 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)

您有两个选择:

  1. 每次要输入内容时都要浏览数组,并检查数组中是否存在当前ID

  2. AdventureRide覆盖equalshashCode方法,以便两个元素具有相同的ID时相同。完成后,将数组替换为Set<AdventureRide>。这样可确保您的参赛作品具有唯一的ID

  3. 我建议你选择选项2,原因是:

    1. 如果您需要检查其他字段,则只需更改equalshashCode方法。
    2. 由于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