黑马程序员技术交流社区

标题: 数组静态工具类 [打印本页]

作者: 追逐    时间: 2014-3-12 09:21
标题: 数组静态工具类
/*
        静态是使用
        每一个应用中都有共性的功能
        可以将这些共性的功能抽取出来。进行封装
       
        建立一个工具类
        发现问题
        1.对象是用于封装特有数据的。可是ArrayTool工具类中并未封装特有数据
        2.操作数组的每一个方法都没有用到类中的特有数据
        这时就考虑让,让程序更严谨,是不需要对象的
        可以将ArrayTool中的函数定义为static的,直接通过类名调用即可
       
        将方法都静态后,可以方便与使用,但是还是可以被别的类建立对象的
        为了更严谨,可以强制让该类不能建立对象
        把该类的构造函数私有化,就可以让别的程序无法建立该类对象
       
*/
//建立工具类
class ArrayTool {

        //把该类构造函数私有化
        private ArrayTool(){}
       
        //定义一个求取最大值的函数
        public static int getMax(int[] arr) {
                int max = 0;
                for(int i = 1; i < arr.length; i++) {
                        if(arr[max] < arr[i]) {
                                max = i;
                        }
                }
                return arr[max];
        }
       
        //求取最小值
        public static int getMin(int[] arr) {
                int min = 0;
                for(int i = 1; i < arr.length; i++) {
                        if(arr[min] > arr[i]) {
                                min = i;
                        }
                }
                return arr[min];
        }
       
        //数组排序  从小到大
        public static void selectSort(int[] arr) {
                for(int i = 0; i < arr.length - 1; i++) {
                        for(int j = i + 1; j < arr.length; j++) {
                                if(arr[i] > arr[j]) {
                                        sort(arr, i, j);
                                }
                        }
                }
        }
       
        //数组排序  从大到小
        public static void bubbleSort(int[] arr) {
                for(int i = 0; i < arr.length; i++) {
                        for(int j = 0; j < arr.length - i - 1; j++) {
                                if(arr[j] < arr[j + 1]) {
                                        sort(arr, j, j + 1);
                                }
                        }
                }
        }
       
        //数据交换
        private static void sort(int[] arr, int i, int j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
        }
       
        //打印输出数组
        public static void printArray(int[] arr) {
                System.out.print(" [ ");
                for(int i = 0; i < arr.length; i++) {
                        if(i != arr.length - 1) {
                                System.out.print(arr[i] + " , ");
                        } else {
                                System.out.println(arr[i] + " ] ");
                        }
                }
        }
       
}

//建立一个测试类
class ArrayToolTest {
        public static void main(String[] args) {
                int[] arr = {3,4,6,1,7,9,8};
                int a = ArrayTool.getMax(arr);
                p("最大值是:" + a);
                int b = ArrayTool.getMin(arr);
                p("最小值是:" + b);
                //数组排序    排序前
                ArrayTool.printArray(arr);
                //排序  从小到大
                ArrayTool.selectSort(arr);
                //排序后
                ArrayTool.printArray(arr);
                //排序 从大到小
                ArrayTool.bubbleSort(arr);
                //排序后
                ArrayTool.printArray(arr);
               
        }
       
        //建立一个特殊函数。可以用起代替输出语句
        public static void p(Object obj) {
                System.out.println(obj);
        }
       
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2