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();

}


}

http://img.mukewang.com/szimg/5a993f2a0001d67814060574.jpg

SortTestHelper.java:48:

http://img.mukewang.com/szimg/5a993f650001aba108460155.jpg

Main.java:16:

http://img.mukewang.com/szimg/5a993f990001469f13080503.jpg

写回答

1回答

liuyubobobo

2018-03-03

关于这个课程的所有代码,请参考课程官方Github:https://github.com/liuyubobobo/Play-with-Algorithms


可以先运行课程的官方代码,看看在你的环境下是否有问题?如果没有问题,可以仔细比较一下自己的逻辑和我提供的课程代码的区别:)


加油!

2
1
闪光棒
终于找到问题所在了,谢谢老师
2018-03-03
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程