麻烦覆盖Java中的toString()

时间:2017-02-16 21:25:55

标签: java string inheritance interface abstract-class

我有一个为我的Java类练习接口,抽象类,子类和继承的任务。在我的抽象超类(称为 Matrix )中,我必须覆盖toString()方法(使用相同的签名),以便打印由空格分隔的数组的所有元素和由线分隔的行打破。像这样:

 public String toString(){

    String result="";

    for(int x=0; x<nRows(); x++){
        for(int y=0; y<nColumns(); y++){
            result+=""+get(x,y)+" ";
        }
        result+="\n";
    }
    return result;
}

我认为到目前为止一切顺利。然后,在 Matrix 的一个子类( FullMatrix )中,我有一个静态方法生成随机数来填充m×n矩阵。方法如下:

    public static FullMatrix randomMatrix(int m, int n, double low, double high){

    FullMatrix resultMatrix = new FullMatrix(m,n);
    for(int x=0; x<m; x++){
        for(int y=0; y<n; y++){
            resultMatrix.set(x,y,Math.round(low+Math.random()*(high-low)));

        }
    }
    return resultMatrix;
}

同样,到目前为止没有任何问题。但是,在我的main方法中,在另一个类中,当我像这样调用静态方法 randomMatrix 时:

FullMatrix a = new FullMatrix(4,4);
    a.randomMatrix(4,4,-3,5);

它返回一个充满零的矩阵。我认为问题出在我的随机算法上,但没有。我开始调试,结果我的resultMatrix从方法randomMatrix使用toString方法变成一个大字符串(应该打印结果),所以我不能为元素分配新的随机值。奇怪的是toString()永远不会在randomMatrix中调用。那么为什么resultMatrix使用toString方法呢?我尝试在我的超类中注释掉toString覆盖,它解决了问题,但是,在我的任务中,我必须以这种方式打印矩阵。

帮助?我做错了什么?

1 个答案:

答案 0 :(得分:1)

您不能使用对象调用静态方法,因为它没有意义。

矩阵aresultMatrix是两个独立的对象。要获得随机矩阵,请致电:

Matrix m = FullMatrix.randomMatrix(...);