向阵列添加对象时遇到问题。似乎每次我向数组添加一个新的WoodFloor对象时,它都会覆盖数组的所有其他值。这是我的代码:
package code;
public class Main {
private static Block[] blocks = new Block[12];
public static void main(String[] args) {
for(int i = 0; i < 12; i++) {
blocks[i] = new WoodFloor(i * 10, i * 20);
}
}
}
package code;
public class Block {
protected static int x, y;
public Block(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
package code;
public final class WoodFloor extends Block {
public WoodFloor(int x, int y) {
super(x, y);
}
}
答案 0 :(得分:2)
不要对每个实例需要不同的类字段使用static修饰符。 static修饰符使字段成为一个类字段,一个有效地由所有实例共享的字段,这不是你想要的。
所以改变这个:
protected static int x, y;
到此:
protected int x, y;
答案 1 :(得分:2)
您的程序会生成12个不同的对象,但它们都引用同一对x
和y
。问题出在这一行:
protected static int x, y;
// ^^^^^^
当您创建字段static
时,您说该字段的值在类的每个单个对象中都是相同的。这绝对不是您要在此处实现的目标:您需要每个WoodFloor
拥有自己的x
和y
。为此,您使用实例字段(即没有static
声明的字段)。
答案 2 :(得分:0)
静态使类变量可用于类杠杆,因此不需要实例来访问它。这里每次都有效地将其重置为原始值,而不是移动到下一个数组位置并忘记旧数组。
答案 3 :(得分:0)
我怀疑它是x和y的'static'关键字。