gpt4 book ai didi

java - 我的合并排序实现中的运行时错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:15 25 4
gpt4 key购买 nike

我编写了以下归并排序代码。

public class mergesort {

public static int a[];

public static void merges (int work[], int low, int high) {
if (low==high)
return;
else {
int mid = (low+high)/2;
merges(work,low,mid);
merges(work,mid+1,high);
merge(work,low,mid+1,high);
}
}

public static void main (String[] args) {
int a[] = new int[] {64, 21, 33, 70, 12, 85, 44, 99, 36, 108};
merges(a,0,a.length-1);
for (int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
}


public static void merge (int work[], int low, int high, int upper) {
int j = 0;
int l = low;
int mid = high-1;
int n = upper-l+1;
while (low<=mid && high<=upper)
if (a[low] < a[high])
work[j++] = a[low++];
else
work[j++] = a[high++];
while (low <= mid)
work[j++]=a[low++];
while (high <= upper)
work[j++] = a[high++];
for (j=0;j<n;j++)
a[l+j]=work[j];
}
}

它不起作用。编译后出现这个错误:

java.lang.NullPointerException
at mergesort.merge(mergesort.java:45)
at mergesort.merges(mergesort.java:12)
at mergesort.merges(mergesort.java:10)
at mergesort.merges(mergesort.java:10)
at mergesort.merges(mergesort.java:10)
at mergesort.main(mergesort.java:27)

如何解决这个问题?

最佳答案

你有两个名为 a 的数组:

一个静态的,mergesort.a:

public static int a[];

和 main 中的局部变量:

int a[]=new int[]{64,21,33,70,12,85,44,99,36,108};

当您在 merge 中使用 a 时,您使用的是从未初始化的静态成员。
如果你想初始化mergesort.a,你应该这样写

a = new int[]{64,21,33,70,12,85,44,99,36,108};

但是,这会使 merge 变得奇怪,因为它将 work = a 作为参数,并引用静态 mergesort.a,这将是相同的数组。

困惑?我也是……:)

关于java - 我的合并排序实现中的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2948642/

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