如何使用Java中其他类的构造函数初始化2D数组?

时间:2018-08-26 23:14:54

标签: java multidimensional-array constructor

我已通过以下方法实例化了二维数组:

public Seating(int rowNum, int colNum) {
    Guest[][] seatedGuest = new Guest[rowNum][colNum];

我现在想使用Guest类中的Guest构造函数初始化数组,但不确定如何。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

这是参考变量seatedGuest,它在堆栈中。 您必须将对象分配给将在堆上的对象。

您在这里:)

for(int i=0;i<rowNum;i++){
  for(int j=0;j<colNum;j++){
      seatedGuest[i][j]=new Guest();
  }
}

答案 1 :(得分:0)

如果我正确解释了您的问题,那么既然您已经声明了数组,则希望使用Guest初始化每个条目。简单地使用for循环并正常地初始化每个循环怎么样?

for (int i = 0; i < rowNum; i++) {
    for (int j = 0; j < colNum; j++) {
        seatedGuest[i][j] = new Guest(/* ... */);
    }
}

不过,我不得不说这有点不寻常。声明一个数组并立即用来宾完全填充它似乎很奇怪。

根据函数的签名进行猜测,该函数是名为Seating的类的构造函数。显然,您的就座课程吸引了许多宾客来代表人们就座。就像@ElliottFrisch在评论中说的那样,该变量可能应该是字段而不是局部变量,因为它是在构造函数完成后(即在构造对象之后)要保留的信息。

然后,您可能可以定义另一个方法seatGuest,该方法将来宾放入数组:

public void seatGuest(Guest guest, int row, int col) {
    this.seatedGuest[row][col] = guest;
}

最后一句话:您的变量应该命名为seatedGuests,而不是seatedGuest,对吧?

答案 2 :(得分:0)

Guest构造函数仅用于实例化一个实例。您建议的行,

Guest[][] seatedGuest = new Guest[rowNum][colNum];

使用2D数组语义创建大小为rowNum * colNum的数组。但是,此数组中的每个单独插槽都指向一个null值-表示它尚未实例化。因此,假设您有一个Guest(args)构造函数,请遍历新创建的数组以实例化每个值-例如,使用for循环:

for (int i = 0; i < rowNum; i++) {
    for (int j = 0; j < colNum; j++) {
        seatedGuest[i][j] = new Guest( <enter your args> );
    }
}

在项目中万事如意,欢迎您使用StackOverflow!