如何在Java中从类外部向对象数组中添加对象

时间:2015-11-04 21:38:18

标签: java arrays class

我有以下代码:

class Person{
   private Car [] cars;

   public Person(){
     //other variables...
     cars = new Car[10];
   }
   //other methods.....
   //...
   //...
   public void setCar(Car car, int position){
      this.cars[position] = car;
   }

   public Car getCar(int position){
      return cars[position];
   }
}

我的Car课程没有问题,我遇到的问题是我为数组分配了新的Car

这就是我分配它的方式:

public class MainClass{
   public static void main(String [] args){
      Car newCar = new Car();
      Person newPerson = new Person();
      int position = 0;
      int x= 0;
      int option;

      do{
        //Code for menu options and user input detection of options...
        //...
        //...
        switch(option){
          case 1:
           // get user input and set it to newCar variables.....
           newCar.setVariableX();
           newCar.setVariableY();

           //assigment of new car to array of cars in newPerson
           newPerson.setCar(newCar,position);
           position++;
          break;

          case 2: x =2; //exit option
          break;

      }while(x!=2);

      // invoque print option for Array of Cars
   }
}

因此,对阵列的分配似乎是正确的并且打印出来只有 ONE Car,但是如果我添加 MORE 而不是{{ 1}},它将新的car变量分配给数组的所有位置。例如:

car

我得到的结果是

Add car1 to cars[position].
position++
Add car2 to cars[position].

发现问题谢谢你们:

cars[0] = car2;
cars[1] = car2;

3 个答案:

答案 0 :(得分:0)

你应该有这个:

newCar = new Car();
newCar.setVariableX();
newCar.setVariableY();

您总是添加相同的引用,因此在修改对象时,会修改数组中的所有对象。

答案 1 :(得分:0)

Car newCar = new Car()语句移到你的do while循环中,它应该按预期工作。

答案 2 :(得分:0)

您可以使用ArrayList存储多个对象,并在需要时添加/删除。这样你就不仅限于10辆汽车。

class Person{
   private ArrayList<Car> cars;

   public Person(){
     cars = new ArrayList<Car>();
   }
   //other methods.....
   //...
   //...
   public void setCar(Car car, int position){
      this.cars[position] = car;
   }

   public Car getCar(int position){
      return cars[position];
   }

   public void addCar(Car car){
      cars.add(car);
   }
}

此外,您当前的问题是您不断添加相同的Car对象,因为newCar永远不会被重新分配。