这里有新问题所以我可能会错误地思考它,因为我对物体不是很有经验。 我有一个27x27的对象网格,我这样创建:
Square grid[][] = new Square[27][27];
现在,我需要通过方法Environment1
将每个对象放入一个名为add(ColonyNode, int int)
的容器中,每个Square
引用一个ColonyNode
对象,然后通过上述方法将每个ColonyNode
添加到Environment1
容器中。
ColonyNodeView add
方法处理它们在容器中的放置方式,因此处理2 int
个参数。我只是无法弄清楚如何将Square Objects与ColonyNode
对象链接起来并且正在寻找想法。
到目前为止我尝试过但没有奏效的是:
for(int i = 0; i<grid.length; i++){
for(int j = 0; j <grid[i].length; j++){
ColonyNodeView newSquare = new ColonyNodeView();
Environment1.add(newSquare, i, j);
}
}
好的,我会尽力解释这部分计划的总体目标。 Environment1是一个GUI容器,每个ColonyNode将添加到该容器中以显示为网格。 现在,每个Square都由程序的其余部分更新为某些变量值。然后,我希望每个方块引用一个ColonyNode,以便整个GUI(environment1)可以将该信息推送到它上面。
答案 0 :(得分:2)
让我试着帮助你,但我会以多种方式解释你的问题。
让我们看一下这句话“每个Square引用一个ColonyNode”。这似乎使问题含糊不清。
首先,如果您尝试引用 grid 数组中的任何数据,您将获得NullPointerException
。如果您愿意,首先使用构造函数初始化该数组中的每个Object。
所以你应该做的第一个改变是:
grid[i][j]=new Square(); //Initializing the object. An object must be initialized before you can use it
现在,由于您希望grid[i][j]
Square
对象成为ColonyNodeView
的一部分,因此只需添加一个构造函数,该构造函数将Square
对象作为参数。我认为你需要的总体是这样的:
class ColonyNodeView
{
//rest of your variables and references here
Square sq; //Added a reference for a 'Square' object
ColonyNodeView(Square a){
this.sq=a;
}
}
//In the other module
for(int i = 0; i<grid.length; i++){
for(int j = 0; j <grid[i].length; j++){
grid[i][j]=new Square(); //Initialize it
ColonyNodeView newSquare = new ColonyNodeView(grid[i][j]);
//You have now 'linked' the square with the ColonyNodeView.
//you can access it by 'newSquare.sq'
Environment1.add(newSquare, i, j); //Add the ColonyNodeView linked with the Square to Environment. Looks fine now
}
}
答案 1 :(得分:1)
令人困惑的阅读,但从我的理解,听起来你需要在Environment1
内维持一个方格网格。也许以下结构可以帮助您:
public class Environment(){
Square [][] grid;
public Environment(int i, int j){
grid = new Square[i][j]
}
public void setSquare(int i, int j, ColonyNodeView c){
grid[i][j] = c;
}
public Square getSquare(int i, int j){
return grid[i][j]
}
}
现在有趣的部分。你可以这样:
public class Square{
}
public class ColonyNodeView extends Square{
}
或者你可以一起摆脱sqaure类,内部环境有ColonyNodeView
:
public class Environment(){
ColonyNodeView [][] grid;
public Environment(int i, int j){
grid = new ColonyNodeView[i][j]
}
etc . . .
}
<强>替代强>
您也可以将ColonyNodeView
放在Square
内。所以你可以拥有以下内容:
public class Square(){
ColonyNodeView v;
public Square(ColonyNodeView v){
this.v = v
}
//Sets and Gets
}
然后当你致电setSquare
时。您将执行以下操作:
public void setSquare(int i, int j, ColonyNodeView c){
grid[i][j].setColony(c);
}
当然,使用这种方法,您必须确保网格正确初始化。