課下選作做業MySort

20175227張雪瑩 2018-2019-2 《Java程序設計》

課下選作做業MySort

要求

  • 注意:研究sort的其餘功能,要能改的動代碼,須要答辯
  • 模擬實現Linux下Sort -t : -k 2的功能。
  • 要有僞代碼,產品代碼,測試代碼(注意測試用例的設計)
  • 參考 Sort的實現。提交博客連接。

必須答辯才能得分html

import java.util.*;
  
   public class MySort1 {
       public static void main(String [] args) {
           String [] toSort = {"aaa:10:1:1",
                               "ccc:30:3:4",
                               "bbb:50:4:5",
                               "ddd:20:5:3",
                               "eee:40:2:20"};
 
          System.out.println("Before sort:");
          for (String str: toSort)
                      System.out.println(str);
 
          Arrays.sort(toSort);
 
          System.out.println("After sort:");
          for( String str : toSort)
              System.out.println(str);
      }
  }

相關知識

  • Linux系統下的Sort功能
    • 功能: 將文本文件內容加以排序,sort可針對文本文件的內容,以行爲單位來排序。
    • 參數:
參數 功能說明
-b 忽略每行前面開始出的空格字符。
-c 檢查文件是否已經按照順序排序。
-d 排序時,處理英文字母、數字及空格字符外,忽略其餘的字符。
-f 排序時,將小寫字母視爲大寫字母。
-i 排序時,除了040至176之間的ASCII字符外,忽略其餘的字符。
-m 將幾個排序好的文件進行合併。
-M 將前面3個字母依照月份的縮寫進行排序。
-n 依照數值的大小排序。
-o <輸出文件> 將排序後的結果存入指定的文件。
-r 以相反的順序來排序。
-t <分隔字符> 指定排序時所用的欄位分隔字符。
sort -n -k 2 -t'-' date      // -t<分隔字符>   指定排序時所用的欄位分隔字符。  -k  選擇以哪一個區間進行排序
  • split方法:一個String類的數組以regex傳入的分隔符爲標準,對字符串進行分隔,使用時分隔符要放在雙括號中。

代碼實現

  • 僞代碼
將字符串數組tosort用「:」分隔,以第二列數值大小爲標準從小到大排列:
建立整型數組a,長度與tosort長度相同
調用split函數將tosort數組以:(冒號)爲分隔符分紅小字符串
將每個tosort元素的第二例列數值存入數組a中
調用Arrays類的sort函數對a進行排序
輸出排序後的結果
  • 產品代碼
/**
 * @author 20175227 Xueying Zhang
 * @date 2019/5/19 11:44.
 */
import java.util.*;

public class MySort {
    public static void main(String [] args) {
        String [] toSort = {
                "aaa:10:1:1",
                "ccc:30:3:4",
                "bbb:50:4:5",
                "ddd:20:5:3",
                "eee:40:2:20"};

        System.out.println("Before sort:");//輸出排序前字符串數組
        for (String str: toSort)
            System.out.println(str);

        int [] a=new int[toSort.length];
        for(int i=0;i<toSort.length;i++){//對toSort每個元素用split進行劃分,並儲存進字符串數組list中
            String [] list=toSort[i].split(":");
            a[i]=Integer.parseInt(list[1]);//將list中第二個元素,即toSort中第二列元素存進a中
        }
        Arrays.sort(a);

        System.out.println("After sort:");
        for (int i = 0; i < a.length; i++)//對a中每一個元素
            for (int j = 0; j < toSort.length; j++)//在toSort中每個元素的第二列中比較
                if (a[i] == Integer.parseInt((toSort[j].split(":"))[1]))//若是兩者相等
                    System.out.println(toSort[j]);//就輸出該項元素
    }
    public static int StringTest1(String str){
        int  a;
            String [] list=str.split(":");
            a=Integer.parseInt(list[1]);//將list中第二個元素,即toSort中第二列元素存進a中
        return a;
    }
    public static int[] StringTest2(String[] toSort){
        int [] a=new int[toSort.length];
        for(int i=0;i<toSort.length;i++){//對toSort每個元素用split進行劃分,並儲存進字符串數組list中
            String [] list=toSort[i].split(":");
            a[i]=Integer.parseInt(list[1]);//將list中第二個元素,即toSort中第二列元素存進a中
        }
        Arrays.sort(a);
        return a;
    }
}
  • 測試代碼
import junit.framework.TestCase;
import org.junit.Test;

public class MySortTest extends TestCase {
    String [] toSort = {
            "aaa:10:1:1",
            "ccc:30:3:4",
            "bbb:50:4:5",
            "ddd:20:5:3",
            "eee:40:2:20"};
    @Test
    public void testl() {
        assertEquals(10,MySort.StringTest1("aaa:10:1:1"));
    }
    public void test2() {
        assertEquals(20,MySort.StringTest2(toSort)[1]);
    }
}

運行示例

  • 產品代碼運行結果

  • 測試結果

代碼託管

MySort.javajava

參考資料

  • https://www.cnblogs.com/fulucky/p/8022718.html
  • https://www.cnblogs.com/fyss/p/9065173.html
相關文章
相關標籤/搜索