繁体   English   中英

如何使用 Java 中另一个类的构造函数初始化二维数组?

[英]How do I initialize a 2D array using the constructor of another class in Java?

我用以下方法实例化了一个二维数组:

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

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

有什么建议?

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

干得好 :)

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

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

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

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

从你的函数的签名中猜测,这是一个名为Seating的类的构造函数。 显然,您的座位类正在容纳一系列客人来代表就座的人。 这样,正如@ElliottFrisch 在评论中所说,该变量可能应该是一个字段而不是局部变量,因为它是在构造函数完成后(即在构造对象之后)保留的信息。

然后你可以定义另一种方法, seatGuest也许,它把一个客人放在数组中:

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

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

Guest构造函数适合仅实例化一个实例。 你提议的线路,

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

使用二维数组语义创建一个大小为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!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM