【问题标题】:why is my code going out of bounds? [closed]为什么我的代码超出范围? [关闭]
【发布时间】:2015-09-10 19:18:21
【问题描述】:

我写了这段代码:

class test {

public static void main(String args[]) {
    int array[] = {1,2,3,4,5,6};
    int i = 0;
    int b = 0;
    int c = 0;


    method.dog(i, b, c, array);
}
}

public class method {

static void dog (int i, int b, int c,  int array[]) {

    if (array[i] <= array[c]) {
           if (c == (int) array.length +1 ) {
                int y = array[i];
                array[i] = array[b];
                array[b] =  y;
                if (b == array.length +1) return;
                else  b++; i =b; c=b; dog( i, b, c, array);
           }
            else c++; dog( i, b, c, array);
        }else i ++; c= b; dog( i, b, c, array);
    }
}

我一遍又一遍地遇到同样的问题。它一直在说我要越界了。我该如何解决这个问题?

【问题讨论】:

  • 你试过调试了吗?
  • 已删除脏话。算了,没必要。
  • 尝试打印您的数组的值,以便您可以隔离它发生的位置。您可能正在尝试使用数组中不存在的索引
  • 哦,为了调试和可读性,请在 if-else 语句周围使用大括号。我认为您可能会被“单行 if-else”的东西所困扰。

标签: java indexoutofboundsexception quicksort


【解决方案1】:

您知道数组索引从零到数组大小减一(即它们是从零开始的)吗?所以有效的索引是0array.length - 1(含),所以你的检查b == array.length +1 是错误的,因为它允许高索引。

另外,那些else 部分只包含一个小语句,而不是同一行的其余语句。

【讨论】:

    【解决方案2】:

    我已经修复了您的错误,请参见下面的代码。

    static void dog(int i, int b, int c, int array[]) {
    
        if (c<array.length-1 && array[i] <= array[c] ) {
            if (c <(int) array.length-1) {
                int y = array[i];
                array[i] = array[b];
                array[b] = y;
                if (b < array.length)
                    return;
                else
                    b++;
                i = b;
                c = b;
                dog(i, b, c, array);
            } else
                c++;
            dog(i, b, c, array);
        } else
            i++;
        c = b;
        dog(i, b, c, array);
    }
    

    【讨论】:

    • 它试图达到的目标非常明显:Dog。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2015-04-27
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多