java中数组是怎么作为函数参数进行传递的

阿凡驴子 2013-11-13 10:21:41
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);
}


这一段代码 运行时为什么会抛出空指针异常?··求解释
...全文
4786 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
下面是Java的JDK自带的排序。

	public static void main(String[] args) {

		int[] dataList = { 5, 7, 100, -2, 0, 10, 121 };

		Arrays.sort(dataList, 0, 6);
		for (int i : dataList) {
			System.out.println(i);
		}

	}

不清楚你为什么要自己写一套排序的算法。为了练手?可以的。不过,你可以先参考人家JDK给出的API,借鉴人家的经验。或者你的排序有什么特殊的要求?也需要自己来写。那么就先思考整个完整的排序算法,写在纸上,或者画出排序的流程图。然后再去编码。
  • 打赏
  • 举报
回复
引用 11 楼 q358543781 的回复:
[quote=引用 8 楼 develop_design_level 的回复:] 我给你修改过了。也指出了你的错误。注意你的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);
	}

}

可是为什么没有排序啊··这是快速排序算法啊[/quote] 你的问题是:为什么会报错,而不是“这个算法”该如何实现。我当然没有修改你的算法了。为什么没有排序,应该自己检查一下代码的逻辑,看看自己什么地方出错了。可以实现用伪代码把逻辑写出来,建立模型,分析一下,然后再逻辑正确的前提下,在写你的java代码。中间如果代码出错,你应该学会用IDE的debug工具,进行代码分析。
阿凡驴子 2013-11-13
  • 打赏
  • 举报
回复
引用 8 楼 develop_design_level 的回复:
我给你修改过了。也指出了你的错误。注意你的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);
	}

}

可是为什么没有排序啊··这是快速排序算法啊
姜小白- 2013-11-13
  • 打赏
  • 举报
回复
引用 7 楼 q358543781 的回复:
Exception in thread "main" java.lang.NullPointerException at org.demo.QuickSort.partition(QuickSort.java:21) at org.demo.QuickSort.quickSort(QuickSort.java:8) at org.demo.QuickSort.main(QuickSort.java:49) Vector[i] = dataList[i]; int pivotpos = partition(dataList,left,right); qs.quickSort(dataList, 0, 6); 这三句报错

at org.demo.QuickSort.partition(QuickSort.java:21)
at org.demo.QuickSort.quickSort(QuickSort.java:8)
at org.demo.QuickSort.main(QuickSort.java:49)
这三行出错,楼主可以自己检查代码,打断点来跟踪,慢慢就学会调试了。
teemai 2013-11-13
  • 打赏
  • 举报
回复
int Vector[] = new int[dataList.length];
  • 打赏
  • 举报
回复
我给你修改过了。也指出了你的错误。注意你的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);
	}

}

阿凡驴子 2013-11-13
  • 打赏
  • 举报
回复
Exception in thread "main" java.lang.NullPointerException at org.demo.QuickSort.partition(QuickSort.java:21) at org.demo.QuickSort.quickSort(QuickSort.java:8) at org.demo.QuickSort.main(QuickSort.java:49) Vector[i] = dataList[i]; int pivotpos = partition(dataList,left,right); qs.quickSort(dataList, 0, 6); 这三句报错
姜小白- 2013-11-13
  • 打赏
  • 举报
回复
Vector[] 木有new
姜小白- 2013-11-13
  • 打赏
  • 举报
回复
引用 3 楼 magi1201 的回复:
quickSort(dataList, 0, 6); 第三个参数为dataList中的元素位置,dataList.length=6,最后一个元素为dataList[5],即dataList.length -1
不好意思,看错了,楼主贴一下你的具体的错误信息,帮助分析
tony4geek 2013-11-13
  • 打赏
  • 举报
回复
int pivotpos = low; int Vector[] = null; for (int i = 0; i <= dataList.length; i++) { Vector[i] = dataList[i]; }
姜小白- 2013-11-13
  • 打赏
  • 举报
回复
quickSort(dataList, 0, 6); 第三个参数为dataList中的元素位置,dataList.length=6,最后一个元素为dataList[5],即dataList.length -1
阿凡驴子 2013-11-13
  • 打赏
  • 举报
回复
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++){ System.out.println(dataList[i] + " "); } } int partition(int dataList[],int low,int high){ int pivotpos = low; int Vector[] = null; 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); } }
  • 打赏
  • 举报
回复
请帖出你的完整代码。 QuickSort qs = new QuickSort(); qs.quickSort(dataList, 0, 6); 这里看不到,就不明白你的代码的意思

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧