Java 制作多个对象的更有效方法

Java 制作多个对象的更有效方法,java,export,lwjgl,slick2d,Java,Export,Lwjgl,Slick2d,我正在尝试用Java制作一个记忆游戏。游戏基本上将是一个网格中的一些正方形,目前为4x4,仅用于测试目的。我已经创建了我的Square类,并编程了我希望他们在该类中执行的操作,然后在另一个类中创建了一个Square对象来处理游戏的“正常模式”。现在,由于我有一个4x4的正方形网格,我需要制作16个不同的正方形(或者至少这是我目前的想法)。我还需要在相应的位置画正方形 我的问题是:在创建16个正方形对象的同时仍然能够单独操纵它们,最有效的方法是什么?(有点像每个人都有自己的名字;Square、Sq

我正在尝试用Java制作一个记忆游戏。游戏基本上将是一个网格中的一些正方形,目前为4x4,仅用于测试目的。我已经创建了我的Square类,并编程了我希望他们在该类中执行的操作,然后在另一个类中创建了一个Square对象来处理游戏的“正常模式”。现在,由于我有一个4x4的正方形网格,我需要制作16个不同的正方形(或者至少这是我目前的想法)。我还需要在相应的位置画正方形

我的问题是:在创建16个正方形对象的同时仍然能够单独操纵它们,最有效的方法是什么?(有点像每个人都有自己的名字;Square、Square1、Square2等)


我也在使用Slick2D库。

你可以尝试
Square[]][]网格=新正方形[4][4]
你可以尝试
Square[][]网格=新正方形[4][4]
我会使用一个正方形[][]数组,例如
Square[][]正方形=新正方形[4][4][/code>,然后用两个嵌套循环中的所有16个正方形对其进行初始化:

for (int x = 0; x < squares.length) x++)
    for (int y = 0; y < squares[x].length; y++)
        squares[x][y] = new Square(x, y);
for(int x=0;x
我会使用一个正方形[][]数组,例如,
正方形[][]正方形=新正方形[4][4]
,然后在两个嵌套循环中使用所有16个正方形对其进行初始化:

for (int x = 0; x < squares.length) x++)
    for (int y = 0; y < squares[x].length; y++)
        squares[x][y] = new Square(x, y);
for(int x=0;x
如上所述,Square[][]squareGrid=new Square[4][4]是一个很好的方法; 然后,您可以使用以下方法初始化所有16个:

 for (int i = 0; i < squareGrid.length; i++)
        for(int j = 0; j < squareGrid[i].length; j++)
            squareGrid[i][j] = new Square();
可用于操纵第二行、第三列的正方形。 通过这种方式,您将避免扫描所有的方块,以获得网格上特定单元格的方块,从而使其更加高效


快乐编码:)

如上所述,Square[][]squareGrid=newsquare[4][4]是一种很好的方法; 然后,您可以使用以下方法初始化所有16个:

 for (int i = 0; i < squareGrid.length; i++)
        for(int j = 0; j < squareGrid[i].length; j++)
            squareGrid[i][j] = new Square();
可用于操纵第二行、第三列的正方形。 通过这种方式,您将避免扫描所有的方块,以获得网格上特定单元格的方块,从而使其更加高效


快乐编码:)

这将创建16个不同名称的方块?对不起,我读过这些2D数组,但从来没有完全理解过。还有,你从哪里得到的。长度?此外,当for循环检查int y时,为什么会显示“isquare=squares[0][0];平方2=平方,但这既不会创建新的正方形,也不会复制任何内容。@MrPork这是一个输入错误:p使用for循环初始化正方形数组有什么意义?你不能这样做吗“Squares[4][4]=新的正方形(x,y)?为什么正方形[]会变成正方形(x,y)?我很抱歉问了这么多问题,我对编程非常陌生,想要得到所有我能得到的信息。这将创建16个具有不同名称的不同正方形?很抱歉,我读过这些2D数组,但从未完全理解它们。另外,你从何处获得的.length?更进一步,为什么会显示“Isquare=squares[0][0];square2=square;
,但这既不会创建新的正方形,也不会复制任何内容。@MrPork这是一个输入错误:p使用for循环初始化正方形数组有什么意义?您不能这样做吗“Squares[4][4]=new square(x,y)?为什么正方形[]变成正方形(x,y)?我很抱歉我所有的问题,我真的是新的编程,并希望所有的信息,我可以得到。非常感谢!不过我只有两个问题。为什么要使用for循环进行初始化,以及如何在循环中定义i和j。第一个for循环是否执行行,第二个for循环是否执行列,或者反之亦然?1)您可以将数组视为一个只包含对实际对象的引用的容器,在将这些引用设置为某个对象之前,它将为null。因此,通过执行squareGrid[i][j]=new Square(),您实际上是在创建一个新的Square对象,并将其设置为索引[i][j]处的引用。如果不这样做,则[i][j]处的值将为null,当您尝试访问任何Square Object方法以及不使用squareGrid[1][3]的方法时,将抛出臭名昭著的NullPointerException。callSomeFunc().2)您可以将其视为对您更有意义的方法。对我来说,例如在符号数组[i][j]中,我认为第一个数组或“i”是行,而该数组或“j”中的数组是列。你可以从相反的角度来考虑它们,但要确保它与程序的其余部分一致,以避免任何潜在的混乱。再次感谢,这一解释帮了大忙。非常感谢!不过我只有两个问题。为什么要使用for循环进行初始化,以及如何在循环中定义i和j。第一个for循环是否执行行,第二个for循环是否执行列,或者反之亦然?1)您可以将数组视为一个只包含对实际对象的引用的容器,在将这些引用设置为某个对象之前,它将为null。因此,通过执行squareGrid[i][j]=new Square(),您实际上是在创建一个新的Square对象,并将其设置为索引[i][j]处的引用。如果不这样做,它将在[i][j]处为null,并抛出臭名昭著的NullPo