我是Java的初学者,我需要编写一个next()
方法,它将从2D数组返回当前值并将指针移动到下一个元素。它与Iterators的next()
方法类似。
例如,我们可能有:
int[][] values = {{1, 2}, {3, 4}};
当我们第一次使用next()
时,它返回1
(指针移动到下一个索引,现在指针位于2
),第二次使用 - 2
(+移动指针),第三个 - 3
(+移动指针)等
我写了一些不好的代码来说明我想要做的事情:
public class ArrayConverter {
private final int[][] values;
private int upper = 0;
private int lower = -1;
public ArrayConverter(int[][] values) {
this.values = values;
}
public int next() {
lower++;
int result = 0;
try {
result = values[upper][lower];
} catch (ArrayIndexOutOfBoundsException a) {
lower = 0;
upper++;
try {
result = values[upper][lower];
} catch (ArrayIndexOutOfBoundsException r) {
upper = 0;
lower = -1;
System.out.print("Reached the end of data. Indexes will be zeroed.");
}
}
return result;
}
}
有没有办法更好地做到这一点,尤其是不使用try/catch
块?
答案 0 :(得分:1)
试试这个:
private int upper = 0;
private int lower = 0;
public int next() {
if(lower >= values[upper].length){
upper++;
lower = 0;
}
if(upper >= values.length){
throw new NoSuchElementException("Reached end");
}
int result = values[upper][lower++];
return result;
}