为什么无论更新成功与否,此方法都打印两条消息



我有一个更新车辆库存的程序。我称updateVehicle()。。。它应该循环遍历车辆的arrayList,以根据用户输入查找匹配项。在if语句中,如果找到匹配项,则使用用户输入的内容更新arrayList中的车辆,显示更新的详细信息,并显示成功更新的消息。如果未找到匹配项,只显示未找到消息
如果arrayList中只有一辆车,则该代码会正常工作,并使用正确的消息更新车辆。但是,如果arrayList中有多辆车,它会更新它,但仍会打印两条消息。

public void updateVehicle(String makeCurrent, String modelCurrent, String colorCurrent, int yearCurrent, int mileageCurrent,
String makeUpdated, String modelUpdated, String colorUpdated, int yearUpdated, int mileageUpdated) {
for (int i = 0; i < listOfVehicles.size(); i++) {
AutoInv vehicle = listOfVehicles.get(i);
if (vehicle.getMake().equalsIgnoreCase(makeCurrent) && vehicle.getModel().equalsIgnoreCase(modelCurrent)
&& vehicle.getColor().equalsIgnoreCase(colorCurrent) && vehicle.getYear() == yearCurrent
&& vehicle.getMileage() == mileageCurrent) {
vehicle.setMake(makeUpdated);
vehicle.setModel(modelUpdated);
vehicle.setColor(colorUpdated);
vehicle.setYear(yearUpdated);
vehicle.setMileage(mileageUpdated);
System.out.println("nVehicle updated successfully!n");
displayCurrentVehicleEntry();
//          break;
} else {
System.out.println("nVehicle not found in inventory!");
}
}
}

问题是并非所有车辆都符合条件。然而,您为每个未找到的邮件打印出未找到的信息。使用boolean来确定是否至少发现了一辆车(我认为可能不止一辆(。一旦找到,将boolean设置为true。然后使用它来确定是否应该打印错误消息。

public void updateVehicle(String makeCurrent, String modelCurrent,
String colorCurrent, int yearCurrent, int mileageCurrent,
String makeUpdated, String modelUpdated, String colorUpdated,
int yearUpdated, int mileageUpdated) {
boolean found = false;
for (int i = 0; i < listOfVehicles.size(); i++) {
AutoInv vehicle = listOfVehicles.get(i);
if (vehicle.getMake().equalsIgnoreCase(makeCurrent)
&& vehicle.getModel().equalsIgnoreCase(modelCurrent)
&& vehicle.getColor().equalsIgnoreCase(colorCurrent)
&& vehicle.getYear() == yearCurrent
&& vehicle.getMileage() == mileageCurrent) {
vehicle.setMake(makeUpdated);
vehicle.setModel(modelUpdated);
vehicle.setColor(colorUpdated);
vehicle.setYear(yearUpdated);
vehicle.setMileage(mileageUpdated);
System.out.println("nVehicle updated successfully!n");
displayCurrentVehicleEntry();
found = true; // at least one was found.
}
}
if (!found) {
System.out.println("nVehicle not found in inventory!");
}
}

注意:如果您确信每个查询只会找到一辆车,那么您可以跳过boolean,在更新后只做一个返回语句。如果循环结束而没有返回,则没有找到车辆。所以把print语句放在循环块之后。只有当循环找不到任何东西时,它才会打印。

我建议你可以做一些事情(我知道,我知道,有成千上万种不同的编码方法(。

  1. 不在updateVehicle中传递10个参数,而是传递2个类型为AutoInv的对象,1个用于当前对象,另一个用于更新对象
  2. 不要将AutoInv的所有属性1与1进行比较,而是使用AutoInv.equals方法(如果还没有,请将其写入pojo类(
  3. 使用(如果可能(lambda表达式搜索列表中的当前车辆

POJO类

public class Vehicle {

private String make;
private String model;
private String color;
private int year;
private int mileage;

public Vehicle(String make, String model, String color, int year, int mileage) {
super();
this.make = make;
this.model = model;
this.color = color;
this.year = year;
this.mileage = mileage;
}

//Getters and setters

//hashcode method
//toString method

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Vehicle)) {
return false;
}
Vehicle other = (Vehicle) obj;
return Objects.equals(color, other.color) && Objects.equals(make, other.make) && mileage == other.mileage
&& Objects.equals(model, other.model) && year == other.year;
}

}

带有搜索/更新逻辑的类

public class Main {
ArrayList<Vehicle> listOfVehicles = new ArrayList<>();

Main(){
listOfVehicles.add(new Vehicle("Honda", "Accord", "Black", 2020, 15000));
listOfVehicles.add(new Vehicle("Ford", "F-150", "White", 2021, 11000));
listOfVehicles.add(new Vehicle("Chevrolet", "Camaro", "Red", 2018, 32500));
}

public void updateVehicle(Vehicle current, Vehicle updated) {
Optional<Vehicle> found = listOfVehicles.stream().filter(vehicle -> vehicle.equals(current)).findFirst();
if (found.isPresent()) {
System.out.print("Found: ");
System.out.println(found.get());
found.get().setColor(updated.getColor());
found.get().setMake(updated.getMake());
found.get().setMileage(updated.getMileage());
found.get().setModel(updated.getModel());
found.get().setYear(updated.getYear());
System.out.println("nVehicle updated successfully!n");
} else {
System.out.println("nVehicle not found in inventory!");
}
}

public static void main(String[] args) {
Main main = new Main();
System.out.println("Original list");
System.out.println(main.listOfVehicles);

Vehicle toFind = new Vehicle("Chevrolet", "Camaro", "Red", 2018, 32500);
Vehicle updated = new Vehicle("Chevrolet", "Camaro", "Black", 2018, 45000);
main.updateVehicle(toFind, updated);

System.out.println("Modified list");
System.out.println(main.listOfVehicles);

}

}

控制台输出

Original list
[Vehicle [make=Honda, model=Accord, color=Black, year=2020, mileage=15000], Vehicle [make=Ford, model=F-150, color=White, year=2021, mileage=11000], Vehicle [make=Chevrolet, model=Camaro, color=Red, year=2018, mileage=32500]]
Found: Vehicle [make=Chevrolet, model=Camaro, color=Red, year=2018, mileage=32500]
Vehicle updated successfully!
Modified list
[Vehicle [make=Honda, model=Accord, color=Black, year=2020, mileage=15000], Vehicle [make=Ford, model=F-150, color=White, year=2021, mileage=11000], Vehicle [make=Chevrolet, model=Camaro, color=Black, year=2018, mileage=45000]]

我希望这是有帮助的,

编码快乐!

Karl

最新更新