国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java對數器的使用講解

2024-07-14 08:43:25
字體:
來源:轉載
供稿:網友

聽左神算法課的時候學到了一個非常有用的東西——對數器

對數器是用來測試代碼正確性的,我們在找不到合適的oj系統測試自己的代碼時,可以自己寫一個對數器對代碼進行測試

設計對數器的一般步驟為:

  • 1.有一個你要測的方法a;
  • 2.實現一個絕對正確即使復雜度不好的方法b;
  • 3.實現一個隨機樣本產生器;
  • 4.實現比對的方法;
  • 5.把方法a和方法b比對很多次來驗證方法a是否正確
  • 6.如果有一個樣本使得比對出錯,打印樣本分析是哪個方法出錯
  • 7.當樣本數量很多時比對測試依然正確,可以確定方法a已經正確

舉個例子:

冒泡排序的對數器:

1.要測的方法

public static void sort(int[] arr) {    if(arr == null || arr.length < 2)      return;    for(int end = arr.length-1;end > 0;end--) {      for(int i = 0;i < end;i++) {        if(arr[i] > arr[i+1]) {          //自己實現的交換的方法          swap(arr, i, i+1);        }      }    }  }

2.實現一個絕對正確即使復雜度不好的方法b

  // for test 一個絕對正確的方法,調用java自帶的排序方法  public static void rightMethod(int[] arr) {    Arrays.sort(arr);  }

3.實現一個隨機樣本產生器;

  // for test 隨機數組生成器  /*   * Math.random() -> double[0,1)   * (int) ((size + 1) * Math.random()) -> [0, size]   * size = 6, size + 1 = 7   * Math.random() -> [0,1) * 7 -> [0,7)double   * double -> int[0,6] -> int   */  public static int[] generateRandomArray(int size, int value) {    //產生的數組長度是[0, size]    int[] arr = new int[(int) ((size + 1) * Math.random())];    //產生的數組中的數的范圍是-value ~ value    for(int i = 0;i < arr.length;i++) {      arr[i] = (int) ((value + 1) * Math.random()          - (int) (value * Math.random()));    }    return arr;  }

4.實現比對的方法;

  //判斷兩個數組是否相等  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;  }

5.把方法a和方法b比對很多次來驗證方法a是否正確

6.如果有一個樣本使得比對出錯,打印樣本分析是哪個方法出錯

7.當樣本數量很多時比對測試依然正確,可以確定方法a已經正確

  //主方法中:  public static void main(String[] args) {    //testTime是測試次數    int testTime = 500000;    int size = 10;    int value = 100;    boolean succeed = true;    for(int i = 0;i < testTime;i++) {      int[] arr1 = generateRandomArray(size, value);      //拷貝數組,數組new出來的就是在棧中不同的空間中存放,內容相同      //copyArray(int[] arr)是自己實現的拷貝方法      int[] arr2 = copyArray(arr1);      int[] arr3 = copyArray(arr1);      sort(arr1);      rightMethod(arr2);      if(!isEqual(arr1, arr2)) {        succeed = false;        //打印出錯的數組,printArray是自習實現的打印的方法        printArray(arr3);        break;      }    }    //打印要測的部分是否正確    System.out.println(succeed ? "succeed!" : "false..");  }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵璧县| 法库县| 沅陵县| 滨州市| 遵义县| 荣昌县| 海阳市| 涞水县| 长乐市| 南城县| 福鼎市| 团风县| 海兴县| 西盟| 沧源| 新野县| 黄石市| 新昌县| 临猗县| 老河口市| 浑源县| 吉首市| 读书| 溧阳市| 海兴县| 康定县| 陈巴尔虎旗| 肥西县| 石首市| 金平| 镇原县| 乌审旗| 涞水县| 宾川县| 三河市| 湘阴县| 临高县| 拜城县| 南丰县| 广德县| 乌兰浩特市|