.equals () not evaluating the correct boolean

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;
        }
    }
}

Keys and values ​​are entered by the user, then there is a test driver to make sure that it works correctly, but it does not evaluate the correctness of the matrices. It tells me the truth every time. I assume this is true and a comparative comparator. It returns true if all keys and values ​​of both matrices are equal.

"new" command:

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);
}

Test driver part:

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)));

And the input is as follows:

new name1 10 10 // new matrix with 10 rows and 10 columns
10 10 10.0 // int int double treemap
-1 // stops the input
+4
source share
1 answer

It sounds like matrix.get(a)it matrix.get(b)returns the same TreeMap. Try printing the results to make sure.

, , , 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 .

0

All Articles