Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的合并排序程序在Java中显示了一个越界数组_Java_Arrays_Algorithm_Indexoutofboundsexception_Mergesort - Fatal编程技术网

我的合并排序程序在Java中显示了一个越界数组

我的合并排序程序在Java中显示了一个越界数组,java,arrays,algorithm,indexoutofboundsexception,mergesort,Java,Arrays,Algorithm,Indexoutofboundsexception,Mergesort,我正在学习Java,我制作了这个合并排序程序,但是它抛出了一个异常ArrayOutOfBound。我犯了什么错 我还在array.length或array.length-1中使用此代码,但这两种情况都失败了。我的代码似乎不接受数组的长度 //分割数组--- //用于合并阵列 void merge(int a[], int lb, int mid, int ub) { int i = lb; int j = mid + 1; int k = lb; int b[]

我正在学习Java,我制作了这个合并排序程序,但是它抛出了一个异常
ArrayOutOfBound
。我犯了什么错

我还在
array.length
array.length-1
中使用此代码,但这两种情况都失败了。我的代码似乎不接受数组的长度

//分割数组---

//用于合并阵列

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 + " ");
    }
}

您的
合并方法中存在多个问题:

  • 您不分配临时数组
    b
    。你应该写
    intb[]=newint[ub-lb+1]
  • 临时数组中的索引
    k
    应初始化为
    0
    ,而不是
    lb
  • 您应该将临时数组的内容复制回
    a
  • 打印已排序的切片仅用于调试
以下是修改后的版本:

void合并(int a[],int lb,int mid,int ub){
int b[]=新的int[ub-lb+1];
int i=磅;
int j=mid+1;
int k=0;

while(i
j首先:请使用变量的实际名称。这几乎不可读,而且只是一种简单的合并排序。这也使其他人更容易帮助您。@ArvindKumarAvinash:不,
j@AshishVerma:您可以通过单击分数下方的灰色复选标记来接受其中一个答案。
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);
}