【发布时间】:2015-03-02 05:04:41
【问题描述】:
我一直在研究合并排序作为算法和可视化。当我完成编码部分时,这对我来说有点挑战。但是,我仍然使用运行时错误进行编码。错误是 NullPointerException。请帮我。这是一个学校项目。
public class test
{
public static void main (String[]args)
{
int arr[]={11,34,65,89,1,456,90,85,12,70};
mergesort(arr,0,9);
for(int a=0;a<arr.length;a++)
System.out.println(arr[a]);
}
public static void mergesort (int arr[], int low, int high)
{
int middle;
if(low<high)
{
middle = (low+high)/2;
mergesort(arr,low,middle);
mergesort(arr,middle+1,high);
merge(arr,low,middle,high);
}
}
public static void merge(int arr[], int low, int middle, int high)
{
Queue<Integer> buffer1 = new LinkedList<Integer>();
Queue<Integer> buffer2 = new LinkedList<Integer>();
int i;
for(int a=low;a<middle;a++) buffer1.add(arr[a]);
for(int a=middle+1;a<high;a++) buffer2.add(arr[a]);
i=low;
while(!(buffer1.isEmpty()) && !(buffer2.isEmpty()))
{
if(buffer1.peek() <= buffer2.peek())
{
arr[i] = buffer1.poll();
} else
{
arr[i] = buffer2.poll();
}
}
while(!(buffer1.isEmpty()))
{
arr[i] = buffer1.poll();
}
while(!(buffer2.isEmpty()))
{
arr[i] = buffer2.poll();
}
}
}
【问题讨论】:
-
堆栈跟踪有什么要说的......哪一行等?你能突出显示上面代码中的那一行吗?
-
你说空指针异常,所以你可以从日志中粘贴整个部分。它会说它发生在第 XXX 行,所以它是上面代码中的哪一行。
-
我更新了代码。它包含完整的实现。错误在第 18 行。它在递归部分。
-
请问第 18 行是哪一行?你能在代码中突出显示它吗?
-
while 表达式后面为什么要加分号
标签: java recursion merge queue mergesort