java.lang.ArrayIndexOutOfBoundsException:-6

java.lang.ArrayIndexOutOfBoundsException:-6,java,Java,要解决这个问题,我需要在未排序的数组中交换元素x和y,x和y在数组中 对于数组长度>=6,我有此错误。 该代码适用于tabX[]sumB | | sumA==0 | | sumB==0){ for(int i=0;i

要解决这个问题,我需要在未排序的数组中交换元素x和y,x和y在数组中

对于数组长度>=6,我有此错误。 该代码适用于tabX[]<6长度

java.lang.ArrayIndexOutOfBoundsException:-6

int tabX[]={
20, 40, 50, 60, 80, 70
};
int elemA[];
int elemB[];
int-sumA=0;
int-sumB=0;
int tmp,lastButOne;
Arrays.sort(tabX);
而(sumA>sumB | | sumA==0 | | sumB==0){
for(int i=0;i
好吧,Arrays.binarySearch就是这样工作的:当您请求的实际元素不在那里时,您会得到-(插入点)-1,在您的例子中正好是-6


而且:binarySearch假定元素已排序,因此如果元素未排序,则即使该值在列表中,也可能确实找不到该元素。

如果您指出引发异常的位置,将非常有用(在此处添加类似于
//AIOOBE
的注释。通过查看您的代码,我猜您从
数组中得到了一个负返回值。binarySearch()


数组的文档中。binarySearch
:返回搜索键的索引(如果它包含在数组中);否则,((插入点)-1)

您还没有指明哪一行引发了异常,这是远远超出所需的代码。查看异常-它看起来像是您试图访问元素-6。找出原因,如果需要,使用调试器,然后修复问题。在开始使用
之前,您是否检查了数组
tabX[]
中的大小()
?是的,关于数组,你是对的。binarySearch,我已调试,值存储在tabX.P.S中。对此我很抱歉,请忘记显示错误行
int tabX[] = {
    20, 40, 50, 60, 80, 70
};
int elemA[];
int elemB[];
int sumA = 0;
int sumB = 0;
int tmp, lastButOne;
Arrays.sort(tabX);
while (sumA > sumB || sumA == 0 || sumB == 0) {
    for (int i = 0; i < tabX.length; i++) {
        sumA = 0;
        sumB = 0;
        elemA = new int[tabX.length - (i + 1)];
        elemB = new int[i + 1];
        for (int j = 0; j < tabX.length - (i + 1); j++) {
            elemA[j] = tabX[j];
            sumA += elemA[j];
        }
        for (int k = 0; k < elemB.length; k++) {
            elemB[k] = tabX[tabX.length - (k + 1)]; //i
            sumB += tabX[tabX.length - (k + 1)];
        }
        if (sumA == sumB) {
            System.out.println("Secventa A = " + Arrays.toString(elemA));
            System.out.println("Secventa B = " + Arrays.toString(elemB));
            break;
        } else if (sumA < sumB) {
            System.out.println("Not a solution");
            break;
        }
        /************ Swap element in array****************/
        lastButOne = tabX[tabX.length - (i + 2)];
        int indexOfLastButOne = Arrays.binarySearch(tabX, lastButOne);
        tmp = tabX[i];
        tabX[indexOfLastButOne] = tmp; //here is error
        tabX[i] = lastButOne;
    } //for
} //while
    int indexOfLastButOne = Arrays.binarySearch(tabX, lastButOne);
    ...
    tabX[indexOfLastButOne] = tmp; // ArrayOutOfBoundsException