zoukankan      html  css  js  c++  java
  • Java之数组的遍历、最大值、最小值、、总和、平均值、数组的复制,反转,查找(线性查找、二分法查找)

    一、求数组的最大值,最小值,总和,平均值

    public class ArrayUtil {
        public static void main(String[] args) {
            ArrayUtil arrayUtil = new ArrayUtil();
            int[] arr = new int[]{23,25,52,34,-5,99,82,0,56,9,46};
            int max = arrayUtil.getMax(arr);
            System.out.println("数组中的最大值为:"+max);
    
            int min =arrayUtil.getMin(arr);
            System.out.println("数组中的最小值为:"+min);
    
            int sum =arrayUtil.getSum(arr);
            System.out.println("数组的元素总和为:"+sum);
    
            int avg =arrayUtil.getAvg(arr);
            System.out.println("数组的元素平均值为:"+avg);
    
            arrayUtil.printArray(arr);
    
        }
    
    
        //求数组的最大值
        public int getMax(int[] arr){
            int maxValue = arr[0];
            for (int i=1;i<arr.length;i++){
                if (maxValue<arr[i]){
                    maxValue = arr[i];
                }
            }
            return maxValue;
        }
    
        //求数组的最小值
        public int getMin(int[] arr){
            int minValue = arr[0];
            for (int i=1;i<arr.length;i++){
                if (minValue>arr[i]){
                    minValue = arr[i];
                }
            }
            return minValue;
        }
    
        //数组的总和
        public int getSum(int[] arr){
            int sum = 0;
            for (int i=0;i<arr.length;i++){
                sum +=arr[i];
            }
            return sum;
        }
    
        //求数组平均值
        public int getAvg(int[] arr){
            return getSum(arr) /arr.length;
        }
    
        //遍历数组
        public void printArray(int[] arr){
            System.out.print("[");
            for (int i=0;i<arr.length;i++){
                System.out.print(arr[i]);
                if (i<arr.length-1){
                    System.out.print(",");
                }
            }
            System.out.print("]");
        }
    }

    二、数组的复制

    注意:此复制不是赋值,是数组元素的复制

    public class Hello {
        public static void main(String[] args){
            String[] arr = new String[]{"jj","DD","MM","BB","GG","AA"}; //源数组
    
            String[] arr1 = new String[arr.length];  //目标数组
            //数组的复制(区别于数组变量的赋值arr1=arr)
            for(int i=0;i<arr1.length;i++){
                arr1[i] = arr[i];    //将源数组的元素逐一复制到目标数组
            }
            //遍历查看结果
            for (int i=0;i<arr1.length;i++){
                System.out.print(arr1[i]+" ");
            }
    
        }
    }

    三、数组的反转

    什么是反转?就是将数组元素倒过来排列

    思考:就是将最后一个元素排在第一位,将倒数第二个元素排在第二位,也就是要交换元素,那如何交换两个元素?
    假如有两个杯子A和B,里面都装有水,如何将A杯、B杯子里面的水交换呢?

    可以找第三个杯子C,先将B杯子里面的水倒入C中,B杯子已经空了,再将A杯子里面的水倒入B杯子,最后将C杯子里面的水倒入A杯子

    //数组的反转
    public class Hello {
        public static void main(String[] args){
            String[] arr = new String[]{"jj","DD","MM","BB","GG","AA"};
    
            for (int i=0;i< arr.length/2;i++){  //注意终止交换条件是除以2
                String temp = arr[i];       //temp变量相当于找的第三个杯子
                arr[i] =arr[arr.length-i-1];
                arr[arr.length-i-1]=temp;
            }
            //查看结果
            for (int i=0;i<arr.length;i++){
                System.out.print(arr[i]+" ");
            }
        }
    }

    四、数组的查找

    线性查找

    //数组的线性查找
    public class Hello {
        public static void main(String[] args){
            String[] arr = new String[]{"jj","DD","MM","BB","GG","AA"};
    
            String dest = "dD";
            boolean isFlag = true;
            //查看结果
            for (int i=0;i<arr.length;i++){
                if (dest.equals(arr[i])){
                    System.out.println("找到指定的元素为:"+i);
                    isFlag = false;
                    break;
                }
            }
            if (isFlag){
                System.out.println("没有找到指定的元素");
            }
        }
    }

    二分法查找

    前提:所要查找的数组必须有序

    //数组的二分法查找
    public class Hello {
        public static void main(String[] args){
    
            int[] arr = new int[]{-98,-34,2,32,46,85,95,129};
            int dest = 2;
            boolean isFlag=true;
            int head = 0; //初始索引
            int end =arr.length-1;//初始末索引
            while (head<=end){
                int middle = (head+end)/2;
                if (dest==arr[middle]){
                    System.out.println("找到指定的元素了,索引为:"+middle);
                    isFlag =false;
                    break;
                }else if (arr[middle]>dest){
                    end = middle -1;
                }else {  //相当于arr[middle]<dest
                    head = middle+1;
                }
            }
            if (isFlag){
                System.out.println("很遗憾,没有找到");
            }
        }
    }
  • 相关阅读:
    归并排序——计算逆序数
    二分图 (匈牙利算法)
    拓扑排序
    读入外挂——秒杀scanf
    最小生成树(kruskal+并查集)
    最短路算法(dijkstra,bellman_ford,floyd)
    【Python】【Module】re
    【Python】【Module】os
    【Python】【Module】random
    【Python】【Module】time
  • 原文地址:https://www.cnblogs.com/king2/p/14310480.html
Copyright © 2011-2022 走看看