值在数组中没有正确更改

时间:2017-03-06 08:16:43

标签: java arrays

我在我的一个叫做Board的课程中有以下方法。 Board有一个120平方的数组,这是我程序中的另一个类。

public class Board{

private Square[] square = new Square[120];
...

每个Square都有一个int行和一个int列。

public class Square extends JButton{
public int row;
public int column;
...

该方法本身应该弄清楚

中每个Square的行和列是什么
    void setSquares() {
    int ones;
    int tenths;
    Square s = new Square();
    Insets squareMargin = new Insets(5, 5, 5, 5);
    s.setMargin(squareMargin);
    for (int i = 0; i < square.length; i++){

        ones = getNdigit(i, 1);
        tenths = getNdigit(i, 2);

        //set row && set column
        if ((tenths >= 2 && tenths <= 9) && (ones >= 1 && ones <= 8)){
            s.row = tenths - 1;
            s.column = ones;

        } else{
            s.row = 0;
            s.column = 0;
        }
        square[i] = s;
        System.out.println(square[0].toString());

    }

所以在方法的最后,我期望square [34]有一行2和一列4.但是,实际结果总是和for循环结束的那样(square [34]有0)的行和列。 如果for循环更改为

for (int i = 0; i < 55; i++){

然后square [34]有一行4和一列4。

1 个答案:

答案 0 :(得分:2)

您只创建了Square的一个实例,并在整个for循环中使用它。在for循环中移动实例化,以便存储的每个实例都不同。

在评论中回答您的问题:

Square s = new Square();

在内存中分配一些空间来存储Square实例(您可以在其中为其成员设置值)。所以现在s引用了内存中的空间。

square[i] = s;

所以现在square[i]引用相同的空格(因此具有相同的成员值)。因此,对于同一位置的每个i所有square[i]个引用(Square的相同实例)。但是如果每次迭代分配s一个,那么s将引用一个新的方格,每个square[i]将引用一个不同的Square实例