public class SparseMatrix {
private final TreeMap<Integer,TreeMap<Integer,Double>> matrix;
private final int rows;
private final int cols;
public SparseMatrix(int r, int c) {
// Creates instances for matrix objects
this.matrix = new TreeMap<>();
// Assigns the matrix a number of rows and a number of columns
this.rows = r;
this.cols = c;
}
public TreeMap<Integer, TreeMap<Integer, Double>> getMatrix() {
return matrix;
}
public static boolean equals(SparseMatrix a, SparseMatrix b) {
if (a.getMatrix().equals(b.getMatrix()) == true) {
return true;
}
else {
return false;
}
}
}
键和值由用户输入,然后有一个测试驱动程序,以确保它正常工作,但它没有正确评估矩阵。它每次都告诉我真实。我假设它是== true和等于比较器。如果两个矩阵的所有键和值相等,则返回true。
“新”命令:
if (cmd.equals("new")) {
String name = input.next();
int rows = input.nextInt();
int cols = input.nextInt();
if (rows < 1 || cols < 1) {
System.out.println("new: rows and/or cols less than 1: ");
System.exit(1);
}
SparseMatrix m = new SparseMatrix(rows,cols);
int i = input.nextInt();
while (i >= 0) {
int j = input.nextInt();
double v = input.nextDouble();
m.set(i,j,v);
i = input.nextInt();
}
matrix.put(name,m);
System.out.printf("new %s = %s\n", name, m);
}
测试驱动程序部分是:
String a = input.next();
if (!matrix.containsKey(a)) {
System.out.println("equals: no such matrix: " + a);
System.exit(1);
}
String b = input.next();
if (!matrix.containsKey(b)) {
System.out.println("equals: no such matrix: " + b);
System.exit(1);
}
System.out.printf("%s.equals(%s) = %b\n", a, b,
SparseMatrix.equals(matrix.get(a),matrix.get(b)));
输入如下:
new name1 10 10 // new matrix with 10 rows and 10 columns
10 10 10.0 // int int double treemap
-1 // stops the input
答案 0 :(得分:0)
听起来像matrix.get(a)
,matrix.get(b)
会返回相同的TreeMap
。尝试打印结果以确定。
至于比较,只要您尝试正确比较的对象覆盖equals
,您就可以使用标准API执行此操作:
public static boolean equals(SparseMatrix a, SparseMatrix b) {
return matrix.get(a).equals(matrix.get(b));
}
我也是Apache Commons和Guava等图书馆的忠实粉丝。诸如Commons Collections.isEqualCollection和Guava Maps.difference之类的实用方法可能派上用场。