2010-10-19 147 views
0

我创建了一个矩阵对象(如数学矩阵,例如一个4x4数字块),它工作正常,可以设置行,列,变量就好了,但是,我不能有多个相同的对象,我创建了一个Matrix对象的ArrayList,每个对象都有三个变量,但是当我调用changeVar(Matrix x,int variable)并刷新矩阵的打印输出时,它会更改所有对象的数字,我改变了变量。所以看起来它只是一遍又一遍地创建相同的实例,如果你改变它,它会改变它们,我是否错过了任何明显的东西?创建一个对象[多个相同的实例]

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

回答

2

您正在使用静态成员。静态成员共享所有实例

不要这样做:删除'static'关键字。

我很惊讶有在this.x = x线没有警告......

快乐编码

+0

ooh,很好,谢谢,我觉得这是因为它的工作,然后我修复了警告并继续前进,然后突然它不起作用..现在,它在对接中变得很痛苦,我不能得到它。谢谢! – Samuel 2010-10-19 23:32:23

1

“静态”修饰符的类字段(即,行,列,价值,NEWROW和NEWCOL)意味着每类而不是每个对象的那些变量的一个副本。

此外,您正在修改静态方法中的这些静态值。除了删除类字段上的静态修饰符外,还需要删除方法中的静态修饰符,然后使用“this”(如果字段与方法的参数名称相同)访问对象的属性(字段)。

+0

+1是的,删除静态修饰符,你应该是正确的创建多个矩阵对象具有不同的实例变量值。哦,还有,请确保将Matrices.xxx = xxx更改为this.xxx = xxx,您所有设置的方法 – Jacob 2010-10-19 22:59:52

+0

谢谢Jacob..I只是将其添加到我的帖子中。 :-) – Jesse 2010-10-19 23:03:15

+0

我有这一切this.xxx = xxx,但通过适合月食...嘿,如果你们是机器人,检查Ultimath测试版;)矩阵乘法/添加等将添加在下一次更新,我希望:) - 在应用程序市场。 twitter lifeinjava! – Samuel 2010-10-19 23:33:53

4

的问题是你的“静态”关键字的使用。

简短的回答是:删除所有的静态关键字。

更长的答案是静态字段/方法不与任何特定的类实例相关联,所以你的代码做的是设置一个叫做“row”的字段,一个叫做“col”等,并且用于所有类的实例。你真正想要的是每个实例一个字段:使字段非静态将实现这一点。

一般情况下,除非你确实是真正的意思,否则就是避免使用静态的,即如果你想要一个单例类,或者你有一个不应该实例化的工具类。

相关问题