簡體   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