zoukankan      html  css  js  c++  java
  • 学号20175313 《实现Linux下Sort -t : -k 2功能》第十二周

    一、题目要求

    实现Linux下Sort -t : -k 2的功能

    二、题目理解

    • -t 分隔符,将每一行数据按照该选项指定的分隔符分成多个域。默认情况下是使用tab键或者空格符来分割的。
    • -k 指定用哪个域的数据来进行排序
    • Sort -t : -k 2:即要求以冒号作为分隔符,给定数据的第二个区域的升序排列为标准,对输入数据进行排序。

    三、设计思路

    • 参数args[0]为用户指定作为排序标准的区域
    • 用public String[]split(String regex)方法对所给字符序列进行分解
    • 将分解后的arges[0]区域所包含的内容存储到k3数组中
    • 调用Arrays类里面的sort方法,对指定区域进行排序,即对k3数组进行排序
    • 通过遍历的方法寻找toSort数组指定区域与排好序后的k3[i]相等的toSort[j],然后将其输出

    四、代码实现

    • 根据已知代码模型在此基础上进行分析,写出关键部分代码:
    import java.util.*;
    public class MySort {
        public static void main(String[] args) {
            int field = Integer.parseInt(args[0])-1;
            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);
            }
        }
    }
    

    伪代码

    • 遍历toSort这个数组,将每个字符串按照冒号进行分隔,分隔后得到的字符串保留在temp中
    • 用k3数组保存指定区域所含的内容
    • 遍历完后,对k3进行升序排列
    • 升序输出以args[0]为关键字的toSort排序
      • 寻找k3[i]相等的关键字所在的字符串位置
      • 当找到之后就输出toSort
      • 否则就继续遍历toSort这个数组

    产品代码:对关键代码解释在注释中均已给出,这里就不作重复说明

    import java.util.*;
    public class MySort {
        public static void main(String[] args) {
            int field = Integer.parseInt(args[0])-1;
            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[] k3 = new int[toSort.length];
            for (int i = 0; i < toSort.length; i++) {//遍历toSort这个数组,将每个字符串按照冒号进行分隔,分隔后得到的字符串保留在tmp中
                String[] tmp = toSort[i].split(":");
                k3[i] = Integer.parseInt(tmp[field]);//求field的所对应的值
            }
            Arrays.sort(k3);//对k3进行升序排列,要求按照第二个field进行排序,所以上面k3应该保留的是第二个field的值
            System.out.println("After sort:");
            //Arrays.sort(k3);
            for (int i = 0; i < k3.length; i++) {//升序输出以field为关键字的toSort排序,所以下面就是寻找k3[i]相等的关键字所在的字符串位置
                for (int j = 0; j < toSort.length; j++){
                    if (k3[i] ==Integer.parseInt((toSort[j].split(":"))[field])) {//当k3[i]等于temp[field]里面的数值时,输出,
                        // 但是由于temp是一个一直变化的,所以只能重新进行temp数组的生成过程
                        System.out.println(toSort[j]);
                    }
                }
            }
        }
    }
    

    测试代码:我是直接将主类改成单元,然后调用该单元对其进行测试

    public class testMysort {
        public static void main(String[] args) {
            mysort3 sort1 = new mysort3();
            String[] toSort = {"aaa:10:1:1",
                    "ccc:30:3:4",
                    "bbb:50:4:5",
                    "ddd:20:5:3",
                    "eee:40:2:20"};
            sort1.mySort(toSort,1);
            System.out.println();
            sort1.mySort(toSort,3);
            System.out.println();
        }
    }
    

    五、代码链接

    六、运行结果截图

    七、参考资料

  • 相关阅读:
    make[1]: *** [/workopenwrt/trunk/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/stamp/.tools_install_nnnnn] Error 2 make[1]: Leaving directory `/work/openwrt/trunk' make: *** [world]
    安卓端与开发板通信
    openwrt串口的使用
    .OpenWrt驱动程序Makefile的分析概述 、驱动程序代码参考、以及测试程序代码参考
    openwrt系统之字符设备驱动软件包加载、测试程序加载
    cc2530串口通信流程
    cc2530操作任务系统初始化分析
    总结OpenWrt系统基本操作方法
    Zigbee协议栈OSAL层API函数【转载】
    cc2530启动流程---广播发送数据
  • 原文地址:https://www.cnblogs.com/xiannvyeye/p/10883003.html
Copyright © 2011-2022 走看看