日期:2014-05-20  浏览次数:20838 次

java中数组是怎么作为函数参数进行传递的
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] dataList = {5,7,100,-2,0,10,121};
QuickSort qs = new QuickSort();
qs.quickSort(dataList, 0, 6);
}


这一段代码   运行时为什么会抛出空指针异常?··求解释

------解决方案--------------------
int pivotpos = low;
int Vector[] = null;
for (int i = 0; i <= dataList.length; i++) {
Vector[i] = dataList[i];
}
------解决方案--------------------
引用:
Quote: 引用:

我给你修改过了。也指出了你的错误。注意你的for循环的 <= 与 < 的使用的情形。你这里的问题很严重啊,出现了2个错误。


package com.wanmei.test;

public class QuickSort {

// private int dataList[] = {5,7,100,-2,0,10,121};
void quickSort(int dataList[], int left, int right) {
if (left < right) {
int pivotpos = partition(dataList, left, right);
quickSort(dataList, left, pivotpos - 1);
quickSort(dataList, pivotpos + 1, right);
}
//for (int i = 0; i <= dataList.length; i++) {//这里不能是 <= 会造成数组的越界,应该是 <
for (int i = 0; i < dataList.length; i++) {
System.out.println(dataList[i] + " ");
}
}

int partition(int dataList[], int low, int high) {
int pivotpos = low;
//int Vector[] = null;//你这里给int数组赋予的是空值,当然在后面的调用的时候会出错了。
int vector[] = new int[dataList.length];;
//for (int i = 0; i <= dataList.length; i++) {//这里不能是 <= 会造成数组的越界,应该是 <
for (int i = 0; i < dataList.length; i++) {
vector[i] = dataList[i];
}
int pivot = vector[low];
for (int i = low + 1; i <= high; i++) {
if (vector[i] < pivot) {
pivotpos++;
if (pivotpos != i)
swap(vector[pivotpos], vector[i]);

}

}
vector[low] = vector[pivotpos];
vector[pivotpos] = pivot;

return pivotpos;
}

void swap(int a, int b) {
int x = 0;
x = a;
a = b;
b = x;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] dataList = { 5, 7, 100, -2, 0, 10, 121 };
QuickSort qs = new QuickSort();
qs.quickSort(dataList, 0, 6);
}

}



可是为什么没有排序啊··这是快速排序算法啊


你的问题是:为什么会报错,而不是“这个算法”该如何实现。我当然没有修改你的算法了。为什么没有排序,应该自己检查一下代码的逻辑,看看自己什么地方出错了。可以实现用伪代码把逻辑写出来,建立模型,分析一下,然后再逻辑正确的前提下,在写你的java代码。中间如果代码出错,你应该学会用IDE的debug工具,进行代码分析。