对数器使用

74 阅读1分钟

​ 来源:我的博客  

1.一个你需要测试的方法A

2.实现一个绝对正确但是复杂度不一定好的方法B

3.实现一个随机样本产生器

4.实现对比方法

5.把A和B对比多次来验证方法A是否正确

6.如果有一个方法对比错误,那么就样本分析那个方法出错

7.当样本数量测试足够多的时候,就可以确定方法正确。

先以冒泡排序为例

1.测试方法

public static void bubleSort(int array[]){
	int temp;
		for(int i = 0;i < array.length;i++){
			for(int j = 0;j< array.length-i-1;j++){
				if(array[j] > array[j+1]){
					temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
	}

2.实现一个绝对正确但是复杂度不一定好的方法B

public static void rightSort(int array[]){
	Arrays.sort(array);
}

3.实现一个随机数组样本产生器

//3.实现一个随机样本产生器
public static int[] generateRandomArray(int size,int value){
	//生成随机长度的数组
	int[] arr = new int[((int)((size+1)*Math.random()))];
	for(int i = 0; i < arr.length; i++){
		arr[i] = (int)((value+1)*Math.random()) - (int)((value)*Math.random());
	}
	return arr;
}

4.实现对比方法

把A和B对比多次来验证方法A是否正确

public static boolean isEqual(int[] array1,int[] array2){
	if((array1 == null && array2 != null)||(array1 != null && array2 == null)){
		return false;
	}
	if(array1 == null && array2 == null){
		return true;
	}
	if(array1.length != array2.length){
		return false;
	}
	for(int i = 0; i<array1.length; i++){
		if(array1[i] != array2[i])
			return false;
	}
	return true;
}

大致就是这样:

完整代码:

package com.fulisha.practice;

import java.util.Arrays;

public class title04 {
	//冒泡排序  1.一个你需要测试的方法A
public static void bubleSort(int array[]){
	int temp;
		for(int i = 0;i < array.length;i++){
			for(int j = 0;j< array.length-i-1;j++){
				if(array[j] > array[j+1]){
					temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
	}
//对数器
//2.实现一个绝对正确但是复杂度不一定好的方法B
public static void rightSort(int array[]){
	Arrays.sort(array);
}

//3.实现一个随机样本产生器
public static int[] generateRandomArray(int size,int value){
	//生成随机长度的数组
	int[] arr = new int[((int)((size+1)*Math.random()))];
	for(int i = 0; i < arr.length; i++){
		arr[i] = (int)((value+1)*Math.random()) - (int)((value)*Math.random());
	}
	return arr;
}
//
public static int[] copyArray(int[] array){
	if(array == null){
		return null;
	}
	int[] res = new int[array.length];
	for(int i = 0; i < array.length; i++){
		res[i] = array[i];
	}
	return res;
}

//打印数组
public static int[] printArray(int[] array){
	/*for(int i = 0; i < array.length; i++){
		System.out.println(array[i]);
	}*/
	return array;
}

//验证
public static boolean isEqual(int[] array1,int[] array2){
	if((array1 == null && array2 != null)||(array1 != null && array2 == null)){
		return false;
	}
	if(array1 == null && array2 == null){
		return true;
	}
	if(array1.length != array2.length){
		return false;
	}
	for(int i = 0; i<array1.length; i++){
		if(array1[i] != array2[i])
			return false;
	}
	return true;
}
public static void main(String[] args) {
	int testTime = 100000;
	int size = 10;
	int value = 100;
	boolean succeed = true;
	for(int i = 0; i<testTime; i++){
		int[] array1 = generateRandomArray(size,value);
		int[] array2 = copyArray(array1);
		int[] array3 = copyArray(array2);
		bubleSort(array1);
		rightSort(array2);
		if(!isEqual(array1,array2)){
			succeed = false;
			printArray(array3);
			break;
		}
		System.out.println(succeed ? "没得问题" :"有点儿问题");
	}
}
}