2-5插入排序算法java代码报空指针错,找不到问题的症结在哪。老师求帮助
来源:2-5 插入排序法 - Insertion Sort
闪光棒
2018-03-02
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SortTestHelper {
private SortTestHelper() {}
/**
* 通过反射获得相应排序算法的类,在通过getMethod()方法获得排序方法
* @param sortName
* @param arr
* @throws Exception
*/
public static void testSort(String sortName, Comparable[] arr) throws Exception {
// //获得反射类对象
// Class cls = Class.forName(sortName);
// //通过反射类对象获得相关方法
// Method sortMethod = cls.getMethod("sort", new Class[] {Comparable[].class});
// Object[] params = new Object[]{arr};
//
// assert sortMethod != null : "sortMethod is null";
// System.out.println(sortMethod);
//
// long startTime = System.currentTimeMillis();
// sortMethod.invoke(null, params);
// long endTime = System.currentTimeMillis();
//
// assert isSort(arr):"sort error";
// System.out.println(sortName + " : " + (endTime - startTime));
// 通过Java的反射机制,通过排序的类名,运行排序函数
try{
// 通过sortClassName获得排序函数的Class对象
Class sortClass = Class.forName(sortName);
// 通过排序函数的Class对象获得排序方法
Method sortMethod = sortClass.getMethod("sort",new Class[]{Comparable[].class});
// 排序参数只有一个,是可比较数组arr
Object[] params = new Object[]{arr};
long startTime = System.currentTimeMillis();
// 调用排序函数
sortMethod.invoke(null,params);
long endTime = System.currentTimeMillis();
assert isSort( arr );
System.out.println( sortClass.getSimpleName()+ " : " + (endTime-startTime) + "ms" );
}
catch(Exception e){
e.printStackTrace();
}
}
private static boolean isSort(Comparable[] arr) {
int n = arr.length;
for(int i = 0 ; i < n-1 ; i++) {
if (arr[i].compareTo(arr[i+1]) > 0) {
return false;
}
}
return true;
}
/**
* 随机获得数组
*/
public static Integer[] generateRandom(int n, int rangeL, int rangeR) {
assert rangeL <= rangeR : "rangeL > rangeR";
Integer[] integer = new Integer[n];
for(int i = 0 ; i < n ; i++) {
Integer num = new Integer((int)(Math.random() * (rangeR - rangeL + 1) + rangeL));
integer[i] = num;
}
return integer;
}
/**
* 数组的拷贝
*/
public static Integer[] copyArray(Integer[] arr) {
Integer[] num = new Integer[arr.length];
System.arraycopy(arr, 0, num, 0, arr.length);
return num;
}
public static void printArray(Comparable[] arr) {
for (Comparable comparable : arr) {
System.out.print(comparable + " ");
}
System.out.println();
}
}
SortTestHelper.java:48:
Main.java:16:
1回答
-
liuyubobobo
2018-03-03
关于这个课程的所有代码,请参考课程官方Github:https://github.com/liuyubobobo/Play-with-Algorithms
可以先运行课程的官方代码,看看在你的环境下是否有问题?如果没有问题,可以仔细比较一下自己的逻辑和我提供的课程代码的区别:)
加油!
212018-03-03
相似问题