Java处理数组索引越界

时间:2014-10-27 10:37:23

标签: java arrays

我正在编写一种算法,将 n n + 1 n-1 元素进行比较。

这意味着第一次和最后一次检查失败,因为array.length + 1将超出边界,因此array [0-1]也是如此。我试图找到一种方法来阻止程序抛出数组索引超出范围的异常,但我不知道如何做到这一点。我最初的计划是检查数组[0-1]和长度+ 1是否总是如此:

numbers[x-1] == null

但是由于从int到null的不匹配,这不起作用。关于如何解决这个问题的任何想法都将非常感激。

5 个答案:

答案 0 :(得分:4)

迭代从index 1开始,以索引array.length - 1结束。

for(int i=1;i<array.length-1;i++){
   int prev = array[i-1];
   int current = array[i];
   int next = array[i+1];
}

答案 1 :(得分:1)

我只是检查数组的边缘:

int prev = -1;
int next = -1;
for (int i=0; i<array.length; i++) {
    if (i>0)
        prev = array[i-1];
    if (i < array.length - 1)
        next = array[i+1];
    else
        next = -1;
    // now do whatever you wish to do with array[i], prev and next
}

在这种情况下,我选择-1表示&#34; null&#34;值。您可以使用其他内容,具体取决于数组中可以包含的值的范围。

答案 2 :(得分:0)

你应该使用&#34;如果&#34;用于检查索引是否在边界内的语句:

if (x >= 0 && x < numbers.length)
    numbers[x] = someNumber

答案 3 :(得分:0)

除了长度检查其他答案建议外,你还可以创建一个更大的数组元素,这样最后一个元素n + 1仍然是一个有效的数组位置,但标记了数组的结尾。通过这种方式,您可以忘记所有可以提高算法速度的长度检查 - 如果这很重要的话。否则我会实施长度检查。

答案 4 :(得分:0)

可以用来比较数组与last和next元素的东西:

for(int index=1;index<array.length-1;index++){
    if (number > numbers[index - 1] && number < numbers[index + 1]) {
        System.out.println("Number is between " + (index - 1) + " and " + (index + 1));
    }
 }