更改arraylist中项目的属性

时间:2015-06-15 19:54:45

标签: java arraylist

我正在开发一个向用户借用汽车的应用程序,用户可以从可用的车队中​​进行选择。不幸的是,当输入注册号并给出借款人的名称时,程序会将该人分配给已添加的arrayList中的第一个条目。我不知道如何让程序将借款人分配给具有给定注册号的项目。谁能指出我正在犯的错误?

设置借款人的方法:

    public void askBorrower(){
    boolean loop = false;
    while(!loop){
        String bName = Console.askString("Borrower's Name: ");
        while(bName.isEmpty()){
            System.out.println("Borrower's name cannot be empty!");
            bName = Console.askString("Borrower's Name: ");
        }
        while(!bName.matches("[a-zA-Z]+")){
            System.out.println("Letters only allowed!");
            bName = Console.askString("Borrower's Name: ");
        }
        setBorrower(bName);
        loop = true;
        boolean newAvailability = false;
        setAvailability(newAvailability);
        System.out.println("You have successfully borrowed a car.");
    }
}

在主类开关触发借用过程中:

 case 4:
               System.out.println("Borrowing a car:");
               System.out.println("");
               sCar = new StaffCar(); 
               sCar.askRegNo();
               sCar = (StaffCar)fleet2.find(sCar.getRegNo());
               if(sCar == null){
                   System.out.println("Car not in the fleet, please try again");
               }
               else if(sCar.availability == false){
                   System.out.println("Car is out on loan currently");
               }
               else{
                  sCar.askBorrower();
               }
               break;

并找到方法:

    public StaffCar find(String regNo){ 
    int index = regNo.indexOf(regNo);
    if(index == -1){
        return null;
    }
    else{
        return fleet2.get(index);

    }
}

我非常感谢任何意见或建议。

2 个答案:

答案 0 :(得分:2)

int index = regNo.indexOf(regNo);

在注册号字符串中搜索注册号码,该号码始终返回0.

您需要在列表中搜索注册号。由于fleet2List<StaffCar>,因此您无法使用indexOf(regNo)按注册号查找汽车。你必须自己迭代List

for (StaffCar car : fleet2) {
    if (car.getRegNo().equals(regNo))
        return car;
}
return null;

答案 1 :(得分:1)

int index = regNo.indexOf(regNo);

此行将始终返回0,因为您要查询字符串本身位置的字符串的索引位置&#39; dog&#39;在&#39;狗&#39;总是0。

假设您的fleet2是一个List,indexOf方法只会为您提供您作为参数传递的元素的位置。即indexOf(aStaffCar)将为您提供汽车的位置,而indexOf(aString)将始终为您提供-1。 我很高兴你使用Map<String,StaffCar>String regNo是关键。

Map<String,StaffCar> fleet2 = ...,

public StaffCar find(String regNo){ 
  //will return null if no entry with key regNo found
  return fleet2.get(regNo);
}