黑马程序员技术交流社区

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

作者: lijiansheng    时间: 2015-6-11 20:32
标题: 数组工具类
/**建立一个用做数组的工具,能求出数组中最大的值,能排序,能交换两个元素位置
@author 李建胜
@version 1.0

*/

//定义一个类首先,叫做ArrayTools 然后在类中实现方法
class ArrayTools{
        //取出数组中最大的值 算法假设第一个值最大,即arr[0]最大,让arr[0]与后面每个元素依次比较如果arr[0]<arr[i]
        //则交换位置 最后返回最大值arr[0]
        //参数要传进一个数组数组定义 int[]
        //该类中的方法都是静态的 ,所以该类不需要创建对象,为了避免被创建对象 将构造函数私有化
        private ArrayTools(){};
        public static int getMax(int[] arr){
                int max=0;
                for(int i=1;i<arr.length;i++){
                        if(arr[i]>arr[max]){
                                max=i;
                               
                        }
                }
                return arr[max];
        }
        /*写一个方法将两个元素交换
        */
        public static void arrSwap(int[] arr,int a,int b){
                int temp=arr[a];
                arr[a]=arr[b];
                arr[b]=temp;
        }
        //冒泡排序 bubbleSort
        public static void bubbleSort(int[] arr){
                //外层循环控制行数每次出一个最大值 一共需要arr.length-2次因为是<所以写-1.假如5个数第一次比需要比四次
                for(int i=0;i<arr.length-1;i++){
                        //内层循环表示两两相比打的数向上冒,每次必出一个最大值后,所以下一次比时,就少一个。这样第i次就少i个
                        for(int j=0;j<arr.length-1-i;j++){
                        //参数传递 方法定义的是索引要用索引传递
                                //判断交换
                                if(arr[j]>arr[j+1]){
                                        arrSwap(arr,j,j+1);
                                }
                        }
                }
       
        }
        //选择排序 第一个依次和第二个第三个第四个相比先找出最大的 冒泡是临近的两个数两两相比
        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]){
                                        arrSwap(arr,i,j);
                                }
                        }
                }
        }
        /**
        获取指定的元素在指定数组中的索引.
        @param arr 接收一个元素为int类型的数组。
        @param key 要找的元素。
        @return 返回该元素第一次出现的位置,如果不存在返回-1.
        */
        public static  int getIndex(int[] arr,int key){
                for(int i=0;i<arr.length-1;i++){
                        if(arr[i]==key){
                                return i;
                        }
                }
                return -1;
        }
        /**
        将int数组转换成字符串。格式是:[e1,e2,...]
        @param arr 接收一个元素为int类型的数组。
        @return 返回该数组的字符串表现形式。
        */
        public static String getString(int[] arr){
                String left="[";
                for(int i=0;i<arr.length;i++){
                        if(i!=arr.length-1){
                                //字符串拼接 left 是字符串 ,arr[i]是变量数字 先将数字表达出来 在拼接字符串
                                left=left+arr[i]+",";
                        }else{
                                left=left+arr[i]+"]";
                        }
                }
                return left;
        }

}
/*定义一个测试类测试所写方法的正确性 TestArray 写主函数
*/
public class TestArray{
        public static void main(String[] args){
                //可以用这种方式赋值先创建对象在赋值 也可以直接赋值 在这里直接将数组初始化
                //int[] arr=new int[5];
                int[] arr1={13,78,56,34,102,29};
                int[] arr2={13,78,56,34,102,29};
                int max=ArrayTools.getMax(arr1);

                System.out.println("最大值为"+max);
                ArrayTools.arrSwap(arr1,0,3);
                System.out.println("冒泡排序结果为");
                ArrayTools.bubbleSort(arr1);
                shuchu(arr1);
                ArrayTools.selectSort(arr2);
                System.out.println("\n"+"选择排序结果为");
                shuchu(arr2);
                int index=ArrayTools.getIndex(arr1,56);
                System.out.println("排序后相同的索引为"+index);
                System.out.println(ArrayTools.getString(arr1));
               
        }
        //方法定义在主方法外面
         public static void shuchu(int[] arr){
                        for(int i=0;i<arr.length;i++){
                                System.out.print(arr[i]+"\t");
                        }
                }
}





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