我正在开发一个向用户借用汽车的应用程序,用户可以从可用的车队中进行选择。不幸的是,当输入注册号并给出借款人的名称时,程序会将该人分配给已添加的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);
}
}
我非常感谢任何意见或建议。
答案 0 :(得分:2)
int index = regNo.indexOf(regNo);
在注册号字符串中搜索注册号码,该号码始终返回0.
您需要在列表中搜索注册号。由于fleet2
是List<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);
}