【问题标题】:Trouble overriding toString() in Java在 Java 中覆盖 toString() 时遇到问题
【发布时间】:2017-02-16 21:25:54
【问题描述】:

我的任务是为我的 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 x 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;
}

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

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

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

帮助?我做错了什么?

【问题讨论】:

  • 调用 a.randomMatrix(4,4,-3,5); 返回一个 FullMatrix 对象,但您没有使用返回值,所以它被丢弃了。做这样的事情:FullMatrix a = FullMatrix.randomMatrix(4,4,-3,5);.
  • 您正在实例上调用静态方法。您的意思可能类似于FullMatrix a = FullMatrix.randomMatrix(4,4,-3,5)
  • toString 似乎不是你的问题。
  • @Jesper 非常感谢!那成功了!现在一切正常!
  • 我刚刚意识到调试显示矩阵使用我的新定义 toString 因为它通常可能将变量结果显示为字符串!

标签: java string inheritance interface abstract-class


【解决方案1】:

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

矩阵aresultMatrix 是两个独立的对象。要获取随机矩阵,请调用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多