对数器
就是利用两个不同的方法去解题,在测试量很大的时候去利用两个方法去解决同一个问题,比对两个方法解决出来的结果
如果一致则表明方法实现,没有则没实现。
因为测试量大所以基本上不会出现特殊例子让方法失败,即因为测试量很多所以极小概率会出现不成功的状况。
其次因为测试方法不同,并且测试量大,所以极小概率会出现两个方法都出错。
通过对数器可以检测代码的正确性以及找出错误代码例子从而进行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| public class Code02_insertionSort { public static int[] generateRandomArray(int maxSize, int maxValue){ int[] arr = new int[(int) ((maxSize + 1) * Math.random())]; for(int i = 0; i < arr.length; i++){ arr[i] = (int) ((maxValue + 1) * Math.random()) -(int) (maxValue * Math.random()); } return arr; } public static int[] copyArray(int[] arr){ return arr; } public static boolean isEqual(int[] arr1,int[] arr2){ if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)){ return false; } if(arr1 == null && arr2 == null){ return true; } if(arr1.length != arr2.length){ return false; } for(int i = 0;i < arr1.length;i++){ if(arr1[i] != arr2[i]){ return false; } } return true; } public static void insertionSort(int[] arr){ if(arr == null || arr.length<2){ return; } for(int i = 1;i<arr.length;i++) { for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) { swap(arr, j, j +1); } } } public static void swap(int[] arr,int i ,int j){ arr[i]=arr[i]^arr[j]; arr[j]=arr[i]^arr[j]; arr[i]=arr[i]^arr[j]; }
public static void comparator(int[] arr){ Arrays.sort(arr); } public static void main(String[] args) { int testTime = 500000; int maxSize = 100; int maxValue = 100; boolean succeed = true; for(int i = 0; i < testTime; i++){ int[] arr1 = generateRandomArray(maxSize,maxValue); int[] arr2 = copyArray(arr1); insertionSort(arr1); comparator(arr2); if(!isEqual(arr1,arr2)){ succeed = false; break; } } System.out.println(succeed ? "Nice" : "Fucking fucked"); } }
|