我有一个功能
的单元格对象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 = 1
应该是
grid[0][1].getval = 1 grid[1][1].getval = 0
导致此错误的原因是什么?
答案 0 :(得分:2)
您将类中的X,Y,Val和Player变量设为静态。这意味着它们由该类的所有实例共享,这意味着它们在所有这些实例中的值将完全相同。我很确定你想要将它们声明为实例变量:
public class Cell {
private int x, y, val, player;
// ...
}
答案 1 :(得分:2)
您使Val
成为静态变量,因此只存在一个Val
变量,并且它由所有Cell
个对象共享。
变化:
static int Val = 0;
为:
int Val = 0;
同样,如果您希望单个Cell
个对象保留变量的单独实例(即x,y,Val),则需要从所有这些对象中删除static
个关键字
答案 2 :(得分:2)
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;