gpt4 book ai didi

java - 使用方法时 Arraylist 不会保留数据

转载 作者:行者123 更新时间:2023-12-02 03:04:37 25 4
gpt4 key购买 nike

我的程序当前接收汽车数据,例如重量、发动机尺寸和颜色,然后创建一个对象 car 并在该对象内设置这些值。

然后将该对象添加到 car 的 Arraylist 中,该数组位于单独的类中。当尝试通过执行 Arraylist.get(0).color 显示第一辆车的属性时,它说我的 Arraylist 为空。

我调查过它,似乎我正在重新初始化 Arraylist,但我不知道如何初始化。

这是设置对象car的代码以及汽车对象和类的构造函数的代码:

public class AddCar {

public static MainMenu menu = new MainMenu();
public Car car;
CarList carList;

//constructor for the AddCar
public AddCar(){carList = new CarList();}

public class Car{

int weight;
String engine;
String color;

public Car(){}

public Car(weight, engine, color)
{
wt = weight;
eng = engine;
col = color;

}


}

public void addCar(){

int weight = 3000;
String engine = 6L
String color = blue;

car = new Car(weight, engine, color);

carList.addCar(car);

menu.user_input();
}

public void displayCar()
{
custList.dispCar();
}

addCar 方法来自一个单独的类文件,它只是将汽车添加到 Arraylist 的末尾,代码如下:

public class CarList {

List<Car> car_list;

public CarList()
{
car_list = new ArrayList<Car>(10);
}
//method to add car to arraylist
public void addCar(Car car)
{

car_list.add(car);
//this print statement works fine
System.out.println(car_list.get(0).color);

}
//method to display color property of first car
public void dispCar()
{
//this print statement comes back with null pointer exception
System.out.println(car_list.get(0).color);
}

当您使用上述类中的方法 dispCar 时,会出现此问题,它会引发空指针异常。

然后这是主菜单,您可以在其中选择要执行的操作的选项:

public class MainMenu {

private static Scanner keyboard1 = new Scanner(System.in);
private AddCar add;

public MainMenu()
{
add = new AddCar();
}

public void user_input()
{
System.out.println("Pick an Option:");
System.out.println("1. Add a car");
System.out.println("2. Remove a car");

System.out.println("Please enter the option #:");
int option = keyboard1.nextInt();

switch (option){
case 1: add.addCar();
case 2: add.displayCar();
}
}
}

最佳答案

恐怕你在依赖处理中迷失了。

您的顶级类将是MainMenu。我相信您希望始终只有一个,并在需要时调用它的方法。没关系。它创建 AddCar 实例。

这就是糟糕的事情发生的地方 - AddCar 有这一行:

public static MainMenu menu = new MainMenu();

这意味着它将拥有自己的 MainMenu 实例,与您用于创建任何 AddCar 实例的实例分开。因此,当您在 addCar 方法中调用 menu.user_input() 时,您是在 MainMenu 的一个单独实例上调用它,该实例具有不同的 AddCar持有另一个仍为空的 CarList

至于如何修复它 - 让 MainMenu 为主类,以便继续进行循环而不是从 AddCar 方法回调到 MainMenu,并从中删除任何提及 MainMenu 的内容。哦,在你的 switch 中添加 break 语句,否则它的行为可能会让你大吃一惊。

关于java - 使用方法时 Arraylist 不会保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41911281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com