Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个对象创建/引用另一个对象?_Java_User Interface_Object - Fatal编程技术网

Java 如何从一个对象创建/引用另一个对象?

Java 如何从一个对象创建/引用另一个对象?,java,user-interface,object,Java,User Interface,Object,这里有一个新问题,我可能想的不正确,因为我对对象不是很有经验。 我创建了一个27x27的对象网格,如下所示: Square grid[][] = new Square[27][27]; 现在,我需要通过方法add(ColonyNode,int int)将这些对象中的每一个对象放入一个名为Environment1的容器中,方法是每个Square引用一个ColonyNode对象,然后通过上述方法将每个ColonyNode添加到Environment1容器中。 ColonyNodeView add方

这里有一个新问题,我可能想的不正确,因为我对对象不是很有经验。 我创建了一个27x27的对象网格,如下所示:

Square grid[][] = new Square[27][27];
现在,我需要通过方法
add(ColonyNode,int int)
将这些对象中的每一个对象放入一个名为
Environment1
的容器中,方法是每个
Square
引用一个
ColonyNode
对象,然后通过上述方法将每个
ColonyNode
添加到
Environment1
容器中。
ColonyNodeView add
方法处理它们在容器中的放置方式,因此使用2
int
参数。我只是不知道如何将正方形对象与
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);
        }
    }

for(int i=0;i读起来有点让人困惑,但据我所知,您需要在
环境1
中维护一个正方形网格。也许以下结构将帮助您:

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
放在
方格中

public class Square(){
    ColonyNodeView v;
    public Square(ColonyNodeView v){
        this.v = v
    }
    //Sets and Gets
}
public void setSquare(int i, int j, ColonyNodeView c){
    grid[i][j].setColony(c);
}
然后,当您调用
setSquare
时,您将执行以下操作:

public class Square(){
    ColonyNodeView v;
    public Square(ColonyNodeView v){
        this.v = v
    }
    //Sets and Gets
}
public void setSquare(int i, int j, ColonyNodeView c){
    grid[i][j].setColony(c);
}

当然,使用这种方法,您必须确保网格已正确初始化。

让我尝试帮助您,但我将以多种方式解释您的问题。

让我们看看“每个正方形引用一个冒号节点”这句话。这似乎让问题变得模棱两可。

首先,如果您尝试引用网格数组中的任何数据,您将得到一个
NullPointerException
。如果您愿意,该数组中的每个对象都将首先使用构造函数初始化。
因此,您应该做的第一个更改是:

grid[i][j]=new Square(); //Initializing the object. An object must be initialized before you can use it
现在,由于您希望
grid[i][j]
Square
对象成为
ColonyNodeView
的一部分,只需添加一个构造函数,该构造函数将
Square
对象作为参数。我认为总体上您需要的是这样的:

类ColonyNodeView
{
//其余的变量和引用在这里
Square sq;//添加了对“Square”对象的引用
科隆诺德维(广场a){
这是sq=a;
}
}
//在另一个模块中

对于(inti=0;i
grid[i][j]=newSquare
?哇,这是一个令人困惑的读物。我可以帮助您从网格链接每个正方形对象,但我无法弄清楚这里发生了什么“每个正方形引用一个冒号节点”.我想你的意思是每个ColonyNode都引用一个正方形?我正在写一个答案。让我看看是否可以帮你你想让每个“ColonyView”都成为Square数据类型的网格[I][j]的一部分,对吗?我仍然不知道他是想“每个正方形都引用一个ColonyView”还是“每个正方形都引用一个ColonyView”正如我所说的,读起来有点混乱,所以我刚刚推荐了这种结构。另一种方法是将
ColonyNodeView
包装在
Square
中。因此,当你在引擎盖下调用
setSquare(…)
时,你会得到类似于
grid[I][j]的东西。setColony(c)
。我想如果他想让每个方块都引用一个ColonyNodeView,只需在Square类中添加一个接受ColonyNodeView参数的构造函数。我根据您的评论@shryansshethyes提出了一个替代方案。我添加了我自己的简短答案,并对您的答案进行了投票。非常全面,我可以提供帮助!:)