我创建了一个Matrix对象(比如数学矩阵,例如4x4数字块)并且它工作正常,可以设置row,col,变量就好了,但是,我不能有多个相同的对象,我有它创建一个十几个Matrix对象的ArrayList,每个对象都有三个变量,但是当我调用changeVar(Matrix x,int变量)并刷新矩阵的打印输出时,它会将所有数字更改为我更改的变量至。所以看起来它只是一遍又一遍地创建相同的实例,如果你改变一个,它会改变它们,我是否遗漏了任何明显的东西?
public class Matrices {
private static int row, col, value, newRow, newCol;
public Matrices(int row, int col, int value) {
this.value = value;
this.row = row;
this.col = col;
}
public static void setRow(int row) {
Matrices.row = row;
}
public static void setValue(int value) {
Matrices.value = value;
}
public static void setCol(int col) {
Matrices.col = col;
}
public static int getCol(Matrices x) {
return col;
}
public static int getRow(Matrices x) {
return row;
}
public static int getValue(Matrices x) {
return value;
}
public static Matrices changeValue(Matrices x, int value) {
newRow = getRow(x);
newCol = getCol(x);
return new Matrices(newRow, newCol, value);
}
}
答案 0 :(得分:4)
问题是您使用“静态”关键字。
简短的回答是:删除所有静态关键字。
更长的答案是静态字段/方法不与类的任何特定实例相关联,因此您的代码所做的是设置一个名为“row”的字段,一个名为“col”等的字段并将其用于所有实例班上的。你真正想要的是每个实例一个字段:使字段非静态将实现这一点。
一般情况下,避免使用静态,除非你真的,真的是指它,即如果你想要一个单例类,或者你有一个不应该实例化的实用程序类。
答案 1 :(得分:2)
您正在使用静态成员。静态成员在所有实例中共享。
不要这样做:删除'static'关键字。
我很惊讶this.x = x
行没有警告......
快乐编码
答案 2 :(得分:1)
类字段上的“static”修饰符(即row,col,value,newRow和newCol)表示每个CLASS而不是每个OBJECT都有一个这些变量的副本。
此外,您当前正在静态方法中修改这些静态值。除了删除类字段上的static修饰符之外,还需要删除方法上的静态修饰符,然后使用“this”访问对象的属性(字段)(如果字段与方法的参数具有相同的名称)。