【问题标题】:How do I update a users input in an arraylist?如何更新数组列表中的用户输入?
【发布时间】:2018-07-09 01:11:32
【问题描述】:

所以我正在为汽车经销商制作一个程序,作为我班级的最后一个项目。此时我会说我完成了大约 75%,但我无法弄清楚如何更新用户在数组列表中的输入。所以每个数组列表槽都包含汽车的年份、品牌、型号、颜色和里程数。我可以添加一辆新车,我可以移除一辆汽车,我可以退出我的程序。我尝试了很多东西,我阅读了很多论文、博客、论坛和我的课本,但它总是随着程序员的输入而更新。

package carDealer;

import java.util.ArrayList;
import java.util.Scanner;

public class VehicleInformation {

public static void main(String [] args) {

    Scanner scnr = new Scanner(System.in);
    ArrayList<VehicleInventory> car = new ArrayList<VehicleInventory>();
    String userInput = "-";

    while (!userInput.equals("q")) {
        System.out.println("Commands: 'a' to add, 'd' to delete, 'e' to edit, 'q' to quit");
        userInput = scnr.next();

        if (userInput.equals("a")) {
            System.out.println("Year: ");
            int year = scnr.nextInt();
            System.out.println("Make: ");
            String make = scnr.next();
            System.out.println("Model: ");
            String model = scnr.next();
            System.out.println("Color: ");
            String color = scnr.next();
            System.out.println("Mileage: ");
            int mileage = scnr.nextInt();

            VehicleInventory userCar = new VehicleInventory();      
            userCar.setMake(make);
            userCar.setModel(model);
            userCar.setYear(year);
            userCar.setColor(color);
            userCar.setMileage(mileage);
            userCar.print();

            addCar(car, userCar);
        }

        if (userInput.equals("d")) {
            for (int i = 0; i < car.size(); ++i) {
                System.out.print((i + 1) + " ");
                car.get(i).print();
            }

            System.out.println("List number: ");
            int userNum = scnr.nextInt();
            car.remove(userNum - 1);
            System.out.println("count: " + car.size());
        }

        if (userInput.equals("e")) {
            for (int i = 0; i < car.size(); ++i) {
                System.out.print((i + 1) + " ");
                car.get(i).print();

            }

            System.out.println("List number: ");
            int userNum = scnr.nextInt();
            car.get(userNum - 1);

【问题讨论】:

  • 你的 addCar() 方法在哪里?
  • 最后 25% 总是占用 75% 的时间。

标签: java arraylist


【解决方案1】:

您可以执行一个循环来查找用户想要更新的汽车模型(它可以是任何其他属性),一旦找到,将其值更新为所需的值:

String vehicleToLookUp = "golf"; // This will be received by user input
String vehicleNewName = "golf gti"; // This will be received by user input
for( int i = 0; i < car.size(); i++){
    if(vehicleToLookUp.getModel().equals(car.get(i)){
        car.get(i).setSomeAttribute(...); // Set the desired attribute here
    }
}

或者如果你想替换整个对象...

String vehicleToLookUp = "golf"; // This will be received by user input
VehicleInventory newVehicle = new VehicleInventory(); // You will set the attributes by user input
for( int i = 0; i < car.size(); i++){
    if(vehicleToLookUp.getModel().equals(car.get(i)){
        car.set(i, newVehicle ); // Create your object and pass it here
    }
}

此外,您可以使用if/else if 甚至switch/case 而不是所有那些if,以获得更好的性能/可读性(认为即使您的逻辑对于第一个if 是正确的,它也会检查所有你创建的另一个if,浪费时间和处理能力。

【讨论】:

  • if (userInput.equals("year")) { System.out.println("今年是哪一年?"); userNum = scnr.nextInt(); carToModify.setYear(userNum);这就是我最终用来修改每个单独部分的内容,不过感谢您的快速响应!
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 2016-07-17
  • 1970-01-01
相关资源
最近更新 更多