我正在尝试制作一个可以容纳不同对象的二维矩阵,主要是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 我希望有人有答案,提前谢谢。
答案 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());
}
它应该有用。