class Vector2D {
private int[] t;
private ArrayList<ArrayList<Integer>> v;
public Vector2D(int[][] vec) {
v = new ArrayList<>();
for (int[] ints : vec) {
ArrayList<Integer> list = new ArrayList<>();
for (int anInt : ints) {
list.add(anInt);
}
v.add(list);
}
t = new int[]{0, 0};
}
public int next() {
ArrayList<Integer> integers = v.get(t[0]);
Integer integer = integers.get(t[1]);
if (t[1] == integers.size() - 1) {
t[1] = 0;
t[0]++;
} else {
t[1]++;
}
// while ( t[0] < v.size() && v.get(t[0]).size() == 0){
// t[0]++;
// }
return integer.intValue();
}
public boolean hasNext() {
while ( t[0] < v.size() && v.get(t[0]).size() == 0){
t[0]++;
}
if (t[0] == v.size() && t[1] == 0) {
return false;
}
return true;
}
}
这个题目总体来说是需求类型题目,完成题目要求即可。采用一个二维ArrayList存储传入的数组,数组t表示当前的行和列(0为行,1为列)。构造函数进行初始化,next函数从当前的行与列取出下一个要读取的内容,并根据当前位置是否是当前行最后一列从而对两个坐标进行更新。
在hasNext函数中,当发现当前行是空且t[0]<总行数,就让行数++,这样就可以保证行数永远在当前行有数或者已经遍历完的情况下。如果已经遍历完就返回false,为遍历完,说明此时对应的行还有数,就可以返回true。