我正在尝试弄清楚如何重新定义我的toString方法,以便它显示矩阵。这是代码..
import java.util.Random;
public class TextLab09st
{
public static void main(String args[])
{
System.out.println("TextLab09\n\n");
Matrix m1 = new Matrix(3,4,1234);
Matrix m2 = new Matrix(3,4,1234);
Matrix m3 = new Matrix(3,4,4321);
System.out.println("Matrix m1\n");
System.out.println(m1+"\n\n");
System.out.println("Matrix m2\n");
System.out.println(m2+"\n\n");
System.out.println("Matrix m3\n");
System.out.println(m3+"\n\n");
if (m1.equals(m2))
System.out.println("m1 is equal to m2\n");
else
System.out.println("m1 is not equal to m2\n");
if (m1.equals(m3))
System.out.println("m1 is equal to m3\n");
else
System.out.println("m1 is not equal to m3\n");
}
}
class Matrix
{
private int rows;
private int cols;
private int mat[][];
public Matrix(int rows, int cols, int seed)
{
this.rows = rows;
this.cols = cols;
mat = new int[rows][cols];
Random rnd = new Random(seed);
for (int r = 0; r < rows; r ++)
for (int c = 0; c < cols; c++)
{
int randomInt = rnd.nextInt(90) + 10;
mat[r][c] = randomInt;
}
}
public String toString()
{
return ("[" + mat + "]");
}
public boolean equals(Matrix that)
{
return this.rows == (that.rows)&&this.cols == that.cols;
}
}
我知道如何显示它以及如何重新设置equals方法,我觉得它已经很晚了,我错过了一些愚蠢的东西。抱歉有任何不便之处!
编辑:抱歉,我忘了指定它必须显示为二维行x列显示。EDIT2:现在我无法重新定义equals方法,因为这是我的任务所必需的。我把它改写成了这个:
public boolean equals(Matrix that)
{
return this.mat == that.mat;
}
它仍然输出:
m1 is not equal to m2
m1 is not equal to m3
有没有简单的方法来解决这个问题?
答案 0 :(得分:1)
public String toString()
{
return Arrays.deepToString(mat);
}
答案 1 :(得分:1)
您必须为矩阵中的每个单元格创建一个嵌套循环。
public String toString()
{
String str = "";
for (int i = 0 ; i<this.rows ; i ++ ){
for (int j = 0 ; j < this.cols ; j++){
str += mat[i][j]+"\t";
}
str += "\n";
}
return str;
}
至于&#34;平等&#34;方法,我不太清楚标准是什么。 如果两个矩阵具有相同的行数和列数,那么您的应用程序是否认为两个矩阵相等?
P.S。
覆盖相等的方法是一种非常好的做法,但是覆盖&#34; hashCode&#34;是一种更好的做法。方法也是如此。 可能与您的应用无关,但这很重要。
希望这会有所帮助:)