java - 在 Java 中重写 toString() 时遇到问题

标签 java string inheritance interface abstract-class

我的任务是练习 Java 类的接口(interface)、抽象类、子类和继承。在我的抽象父类(super class)(称为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 方法并成为一个大字符串(应该打印结果),因此我无法为元素分配新的随机值。奇怪的是 toString() 在 randomMatrix 中从未被调用。那么为什么 resultMatrix 使用 toString 方法呢?我尝试在我的父类(super class)中注释掉 toString 覆盖,它解决了问题,但是,在我的作业中,我必须以这种方式打印矩阵。

帮忙?我做错了什么?

最佳答案

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

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

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

关于java - 在 Java 中重写 toString() 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42284962/

相关文章:

java - 从java代码运行批处理文件代码

c++ - 如何在 C++ 中从用户那里获取具有预定义字符串长度的字符串输入?

java - 当我们有字符串池时为什么要进行字符串重复数据删除

java - 为什么我在这里得到 ClassCastException?

java - 在 Java 中添加到数组并打印数组

java - Java程序列出所有总和为7的四位数字

java - 试图在 java 中将 char 数组作为参数传递并出现索引错误

C : Pass Array of string as function argument

c++ - 删除复制构造函数会破坏继承的构造函数

c# - 使用值注入(inject)器映射不同的属性值