我的合并排序程序显示了Java中超出范围的数组

问题描述 投票:2回答:1

我正在学习Java,并制作了此合并排序程序,但是它抛出ArrayOutOfBound的异常。我的错是什么?

我也在array.lengtharray.length-1处也使用了此代码,但两种情况均失败。看来我的代码不接受数组的长度。

//分割数组-]

void divide(int a[], int lb, int ub) {
    if (lb < ub) {
        int mid = (lb + ub) / 2;
        divide(a, lb, mid);
        divide(a, mid + 1, ub);
        merge(a, lb, mid, ub);
    }
}

//用于打印实际数组---

static void ActualArray(int a[]) {
    System.out.println("----!!!Merge Sort!!!----");
    System.out.println("Your Array is: ");
    for (int i : a) {
        System.out.print(i + " ");
    }
    System.out.println("\n");
}

//用于合并数组

void merge(int a[], int lb, int mid, int ub) {
    int i = lb;
    int j = mid + 1;
    int k = lb;
    int b[] = {};
    while (i <= mid && j <= ub) {
        if (a[i] < a[j]) {
            b[k] = a[i];
            i++;
        } else {
            b[k] = a[j];
            j++;
        }
        k++;
    }
    if (i > mid) {
        while (j <= ub) {
            b[k] = a[j];
            j++;
            k++;
        }
    } else {
        while (i <= mid) {
            b[k] = a[i];
            i++;
            k++;
        }
    }
    System.out.println("Your Sorted Array is: ");
    for (int ele : b) {
        System.out.print(ele + " ");
    }
}

//主要方法

public static void main(String args[]) {
    int arr[] = { 25, 16, 45, 17, 84, 61 };
    ActualArray(arr);

    MergeSort obj = new MergeSort();
    obj.divide(arr, 0, arr.length - 1);
}

Error Image

我正在学习Java,并制作了此合并排序程序,但它引发ArrayOutOfBound异常。我怎么了我也在array.length或array.length-1上使用了此代码,但是两种情况都是...

java arrays algorithm indexoutofboundsexception mergesort
1个回答
1
投票

merge方法中存在多个问题:

© www.soinside.com 2019 - 2024. All rights reserved.