gpt4 book ai didi

java - 如何修复合并排序方法的 ArrayIndexOutOfBoundsException?

转载 作者:行者123 更新时间:2023-11-30 05:46:27 25 4
gpt4 key购买 nike

所以我遇到的问题是我试图让我的合并排序实现运行,但我不断收到一个异常错误,表明数组索引超出范围。这是一个运行时错误,因为我能够毫无问题地编译该程序,并且它将运行直到它命中我的合并排序调用。我尝试的一件事是更改我的变量之一以匹配合并方法中的另一个变量(int k = 0;//第39行)。当我这样做时,代码运行了,但是,合并排序的数组不正确。我什至尝试调试代码,但没有发现问题。下面是我的代码:

public static void merge_sort(int A[], int l, int r){

if(l < r){
int m = (l + r)/2;
merge_sort(A, l, m);
merge_sort(A, m + 1, r);
merge(A, l, m, r);//Line17
}
}

public static void merge(int A[], int l, int m, int r){


int n1 = m - l + 1;
int n2 = r - m;

int L[] = new int [n1];
int R[] = new int [n2];

for(int i = 0; i < n1; i++){
L[i] = A[l + i];
}
for(int j = 0; j < n2; j++){
R[j] = A[m + 1 + j];
}

int i = 0;
int j = 0;
int k = 1; //line39

while(i < n1 && j < n2){
if(L[i] <= R[j]){
A[k] = L[i];
i++;
}
else{
A[k] = R[j];
j++;
}
k++;
}

while(i < n1){
A[k] = L[i];
i++;
k++;
}

while(j < n2){
A[k] = R[j]; //line60
j++;
k++;
}
}

这是错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
at HW3.merge(HW3.java:60)
at HW3.merge_sort(HW3.java:17)
at HW3.main(HW3.java:160) //this line is where I call the method within the main

我知道这意味着数组超出了 15 的设定大小,但我不确定如何解决此问题。我尝试过查看类似的问题,但没有找到解决我遇到的问题的方法。

最佳答案

您的代码中的其他一切都很好。

除了这一行

int k = 1;//第39行

这应该是 k = l(小写字母“L”)

可以引用以下代码

public class StackExchange {
public static

void mergeSort(int A[], int l , int r) {

if (l < r) {
int m = (l+r)/2;
mergeSort(A, l , m);
mergeSort(A, m+1, r);
merge(A, l, m, r);
}

}

private static void merge(int[] A, int l, int m, int r) {

int n1 = m - l + 1;
int n2 = r - m;

int L[] = new int[n1];
int R[] = new int[n2];

for (int i = 0 ; i < n1; i++) {
L[i] = A[l+i];
}

for (int j = 0 ; j < n2; j++) {
R[j] = A[m + 1 + j];
}

int i = 0, j = 0 , k = l;

while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
} else {
A[k] = R[j];
j++;
}

k++;
}

while (i < n1) {
A[k] = L[i];
i++;
k++;
}

while (j < n2) {
A[k] = R[j];
j++;
k++;
}
}

public static void main (String...s) {
int array[] = new int[] {12, 21, 32, 36, 14, 10, 11, 5, 55, 16, 31, 7, 57, 89, 78};

mergeSort(array, 0, array.length - 1);

printArray(array);
}

private static void printArray(int array[]) {
for (int i : array) {
System.out.println(i + " -- ");
}
}
}

关于java - 如何修复合并排序方法的 ArrayIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54740235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com