使用方法

时间:2017-01-28 15:07:42

标签: java arraylist

我的程序目前接收汽车数据,如重量,引擎大小和颜色,然后创建一个对象 car 并在对象内设置这些值。

然后将对象添加到 car 的Arraylist中,该Arraylist位于单独的类中。当试图通过做Arraylist.get(0).color来显示第一辆汽车的属性时,它表示我的Arraylist为空。

我已经查看了它,似乎我正在重新初始化Arraylist,但我不知道如何。

这是设置对象 car 的代码,以及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方法时会发生此问题,它会抛出空指针异常。

然后这是MainMenu,您可以选择该选项:

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();
        }   
    }   
}

1 个答案:

答案 0 :(得分:2)

你害怕依赖处理你迷失了。

您的顶级课程为MainMenu。我相信你想在任何时候都只有一个,并在你需要的时候调用它的方法。没关系。它创建AddCar实例。

这就是坏事发生的地方 - AddCar有这一行:

public static MainMenu menu = new MainMenu();

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

至于如何修复它 - 让MainMenu成为主类,为了继续循环而不是从AddCar方法回调MainMenu,并从中删除任何MainMenu。哦,并在你的交换机中添加break语句,否则它的行为可能会让你感到惊讶。