接收二维数组中的元素和移动指针(Java)

时间:2017-02-01 08:10:13

标签: java arrays pointers multidimensional-array

我是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块?

1 个答案:

答案 0 :(得分:1)

使用array.length进行范围检查

试试这个:

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