得到2d通用矩阵迭代器

时间:2018-03-28 10:49:38

标签: java generics matrix iterator

我正在尝试制作一个可以容纳不同对象的二维矩阵,主要是int和String。到目前为止,我已设法正确存储值(一些如何),但我不知道如何从包含T值的二维矩阵中生成迭代器,因此它适用于下面的test2方法。

public class Matrix<T> implements Iterable<T>  {

    private T[][] matrix;

    public Matrix(int rows, int columns) {

    this.rows = rows;
    this.columns = columns;

    matrix = (T[][]) new String[rows][columns];
    }

    public void insert(int row, int column, T value) {
    matrix[row][column] = (T) value;        
    }
    public Iterator<T> iterator() {

    ArrayList<ArrayList<String>> matrixList = new ArrayList<ArrayList<String>>();

    ArrayList<?> a = new ArrayList<>(Arrays.asList(matrix[0][0]));

        return (Iterator<T>) (a.iterator());
    }
}

在test2方法中假设是这个测试的答案:

    @Test
    public void test2() {
        Matrix<String> m = new Matrix<String>(2, 2);

        m.insert(0, 0, "a");
        m.insert(0, 1, "b");
        m.insert(1, 0, "c");
        m.insert(1, 1, "d");

    for (String element : m) {
        System.out.println(element);
    }
}

到目前为止,它只打印我选择的矩阵中的值(在这种情况下&#34; a&#34;)。我想让它打印矩阵中的所有值。 如果我

  

ArrayList a = new ArrayList&lt;&gt;(Arrays.asList(matrix));   它说:   lJava.lang.String无法强制转换为Java.lang.String。

要温柔,但诚实,我是一个菜鸟&lt; 3 我希望有人有答案,提前谢谢。

1 个答案:

答案 0 :(得分:0)

您只在Iterator中添加0,0索引上的元素。像这样重写你Iterator

public Iterator<T> iterator() {

    ArrayList<T> a = new ArrayList<>();
    for (int i = 0; i < rows; i++) {
        Collections.addAll(a, matrix[i]);
    }
    return (Iterator<T>) (a.iterator());
}

它应该有用。