Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加新值时覆盖所有其他值的数组_Java_Arrays - Fatal编程技术网

Java 添加新值时覆盖所有其他值的数组

Java 添加新值时覆盖所有其他值的数组,java,arrays,Java,Arrays,我在向数组添加对象时遇到了一个问题。似乎每次我向数组添加新的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对象时,它都会覆盖数组的所有其他值。这是我的密码:

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);
}

}
包码;
公共班机{
私有静态块[]块=新块[12];
公共静态void main(字符串[]args){
对于(int i=0;i<12;i++){
区块[i]=新木地板(i*10,i*20);
}
}
}
包装编码;
公共类街区{
受保护的静态int x,y;
公共块(整数x,整数y){
这个.x=x;
这个。y=y;
}
公共int getX(){
返回x;
}
公共int getY(){
返回y;
}
}
包装编码;
公共最终类WoodFloor扩展块{
公共木地板(内部x、内部y){
super(x,y);
}
}

对于每个实例需要不同的类字段,不要使用静态修饰符。静态修饰符使该字段成为一个类字段,所有实例都可以有效地共享该字段,这不是您想要的

因此,改变这一点:

protected static int x, y;
为此:

protected int x, y;

对于每个实例需要不同的类字段,不要使用静态修饰符。静态修饰符使该字段成为一个类字段,所有实例都可以有效地共享该字段,这不是您想要的

因此,改变这一点:

protected static int x, y;
为此:

protected int x, y;

您的程序生成12个不同的对象,但它们都引用同一对
x
y
。问题出在这一行:

protected static int x, y;
//        ^^^^^^

当您将一个字段设置为静态时,您的意思是该字段的值在类的每个对象中都是相同的。这绝对不是你想要达到的目的:你需要每个
WoodFloor
都有自己的
x
y
。为此,您使用实例字段(即声明的字段不包含
static
)。

您的程序生成12个不同的对象,但它们都引用同一对
x
y
。问题出在这一行:

protected static int x, y;
//        ^^^^^^

当您将一个字段设置为静态时,您的意思是该字段的值在类的每个对象中都是相同的。这绝对不是你想要达到的目的:你需要每个
WoodFloor
都有自己的
x
y
。为此,您可以使用实例字段(即声明的字段不包含
static
)。

static使变量在类杠杆上可用,因此不需要实例来访问它。这里每次都有效地将其重置为其原始值,而不是移动到下一个数组位置,并忘记旧数组。

Static使变量在类级别可用,因此不需要实例来访问它。这里每次都有效地将其重置为原始值,而不是移动到下一个数组位置并忘记旧数组。

我怀疑它是x和y的“static”关键字

我怀疑这是x和y的“static”关键字

当你这样做的时候:让他们保持隐私。当你这样做的时候:让他们保持隐私。