Java2D对象数组

Java2D对象数组,java,Java,我有一个具有函数的单元格对象 public class Cell { static int X; static int Y; static int Val = 0; static int Player = 0; public Cell(int a, int b, int p) { // TODO Auto-generated constructor stub X = a; Y = b; Va

我有一个具有函数的单元格对象

public class Cell {
    static int X;
    static int Y;
    static int Val = 0;
    static int Player = 0;

    public Cell(int a, int b, int p) {
        // TODO Auto-generated constructor stub
        X = a;
        Y = b;
        Val = 0;
        Player = p;
    }
使用额外的函数updateX、updateY、updateVal、updatePlayer和相应的get函数。它被称为

    Cell[][] grid = new Cell[7][6];
    for(int i = 0; i < 7; i++)
            for(int j = 0; j < 6; j++)
            {
            grid[i][j] = new Cell(i, j, 0);         
            }       
        System.out.println("wasd");
        grid[0][1].updatePlayer(1); 
        grid[0][1].updateVal(1);

        System.out.println("grid[0][1].getval = " + grid[0][1].getVal() + " grid[1][1].getval = " + grid[1][1].getVal());
应该是

grid[0][1].getval = 1 grid[1][1].getval = 0

导致此错误的原因是什么?

您在类中设置了X、Y、Val和Player变量。这意味着它们被该类的所有实例共享,这意味着它们在所有这些实例中的值将完全相同。我很确定您希望将它们声明为实例变量:

public class Cell {
    private int x, y, val, player;
    // ...
}

您将类中的X、Y、Val和Player变量设置为静态。这意味着它们被该类的所有实例共享,这意味着它们在所有这些实例中的值将完全相同。我很确定您希望将它们声明为实例变量:

public class Cell {
    private int x, y, val, player;
    // ...
}
您将Val设置为静态变量,因此只有一个Val变量存在,并且它由所有单元格对象共享

更改:

static int Val = 0;
致:

类似地,如果希望单个单元格对象保留单独的变量实例,即x、y、Val,则需要从所有这些变量中删除static关键字

您将Val设置为静态变量,因此只有一个Val变量存在,并且它由所有单元格对象共享

static int X;
static int Y;
static int Val = 0;
static int Player = 0;
更改:

static int Val = 0;
致:

类似地,如果希望单个单元格对象保留单独的变量实例,即x、y、Val,则需要从所有这些变量中删除static关键字

static int X;
static int Y;
static int Val = 0;
static int Player = 0;
这些属性不应该是静态的,以下代码应该可以:

int X;
int Y;
int Val;//the default int value is zero 
int Player;
这些属性不应该是静态的,以下代码应该可以:

int X;
int Y;
int Val;//the default int value is zero 
int Player;

不要使用静态变量和方法,除非你有充分的理由这样做-你没有并且事实上有充分的理由不这样做。不要使用静态变量和方法,除非你有充分的理由这样做-你没有并且事实上有充分的理由不这样做。不仅仅是x和y字段-他让所有的字段都是静态的,而不应该是静态的。不仅仅是x和y字段,他让所有的字段都是静态的,而不应该是静态的。