来源:我的博客
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 ? "没得问题" :"有点儿问题");
}
}
}