一维数组及经典应用

2022-08-03,

一、数组的定义

数组是一个变量,存储相同数据类型的一组数据;
数组的下标由0开始向上递增。

数组的声明,分配空间和赋值
public static void main(String[] args) {
        //声明
        int[] a;
        String b[];
        double []c;
        //分配空间 ,使用new关键字来分配空间,new关键字在java语言中优先级最高
        a=new int[5];
        b=new String[6];
        c=new double[4];
        //赋值,空间为5不一定需要全部赋值
        a[0]=10;
        a[1]=11;
        a[2]=12;
        a[3]=16;
        a[4]=15;
        //声明的同时分配空间
        char[] ch=new char[10];
        float[] f={11.1f,22.2f};//声明分配空间并赋值
        int[] d=new int[]{1,2,3};
    }

遍历数组

public static void main(String[] args) {
        int[] scores=new int[5];
        Scanner input=new Scanner(System.in);
        for (int a=0;i<score.length;i++){
            scores[i]=input.nextlnt();
        }
    }

二、使用数组

计算30位同学的平均分,同事打印每一个分数
public static void main(String[] args) {
        int[] scores=new int[30];
       //使用随机数对数组进行赋值
        for (int i = 0; i <30 ; i++) {
          scores[i] = (int) (Math.random() * 80 +20);//scores[i] 数组的每个元素
        }
        //遍历查看数组中每一个元素
        System.out.print("[");
                for (int i = 0; i <scores.length ; i++) {
                    if (i == scores.length - 1) {
                        System.out.println(scores[i] + "]");
                        break;
                    }
                    System.out.print(scores[i]+",");
                }
        //        //计算平均分
        double sum=0;
        double avg=0.0;
        for (int i = 0; i <scores.length ; i++) {
            sum+=scores[i];
        }
        System.out.println("总分为:"+sum);
        System.out.println("平均分为:"+sum/scores.length);
    }

三、取最大值/最小值

  1. 取最大值
public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int[] scores=new int[5];
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数:");
            scores[i]=sc.nextInt();
        }
        for (int i = 0; i < scores.length; i++) {
            System.out.print(scores[i]+",");
        }
        System.out.println();
        //求最大值
        int max=scores[0];
        for (int i = 0; i < scores.length; i++) {
            if (scores[i]>max){
                max=scores[i];
            }
        }
        System.out.println("最大值为:"+max);
    }
  1. 取最小值
    求4家店的最低手机价格
public static void main(String[] args) {
        System.out.println("请输入4家店的价格");
        Scanner sc = new Scanner(System.in);
        int a[] = new int[4];
        for (int i = 0; i < a.length; i++) {
            System.out.println("输入第" + (i + 1) + "的价格");
            a[i] = sc.nextInt();
        }
        int min = a[0];
        for (int i = 0; i < a.length; i++) {
            if (min > a[i]) {
                min = a[i];
            }
        }
            System.out.println("最低价格是:" + min);
    }

四、数组元素的增减

  1. 增加元素
public static void main(String[] args) {
        int[] a={99,85,82,63,60};
        int[] b=new int[6];
        for (int i = 0; i < a.length; i++) {
            b[i]=a[i];                //另b数组前面的值与a一样(数组扩容)
        }
        System.out.println(Arrays.toString(b));  //打印数组
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个数");
        int num=sc.nextInt();
        boolean isInsert=false;
        for (int i = b.length-2; i >=0; i--) {  //从后向前遍历,小的后移,大的在后方插入
            if (num>b[i]){
                b[i+1]=b[i];  //下标后移,即把值赋给后面一位
            }else{
              b[i+1]=num;
              isInsert=true;     //num插入数列
              break;
            }
        }
        if (isInsert==false){
           b[0]=num;
        }
        System.out.println(Arrays.toString(b));
    }
  1. 减少元素
public static void main(String[] args) {
        int[] a={99,85,82,63,60};
        int[] b=new int[4];
        Scanner sc=new Scanner(System.in);
        System.out.println("输入要删除的下标: ");
        int num=sc.nextInt();
        int j=0;
        for (int i = 0; i < a.length; i++) {
            if (i==num)continue;
             b[j]=a[i];
             j++;
        }
        System.out.println(Arrays.toString(b));
    }

五、排序

  1. 选择排序
public static void main(String[] args) {
        /*选择排序逻辑:
         * 外层与内层比,只要找到比自己小的就交换
         * */
        int[] a= {3, 2, 1, 5, 8, 4};
        for (int i = 0; i <a.length; i++) {
           for (int j = i+1; j <a.length ; j++) {
               int min=a[i];
               if (a[i]>a[j]){
                    a[i]=a[j];
                    a[j]=min;
                }
            }
        }
        System.out.println(Arrays.toString(a));
   } 
  1. 插入排序
 public static void main(String[] args) {
     /*
     *逻辑:从第二位开始,向前比较,进行插入逻辑
     */
        int[] a={9,8,1,5,6,7};
        for (int i = 1; i <a.length ; i++) {
            int tmp=a[i];
            boolean flag=false;
            for (int j = i-1; j >=0 ; j--) {
                //如果遇到比自己大的,大的值就后移
                if (a[j]>tmp) {
                    a[j + 1] = a[j];
                } else {
                    a[j + 1] = tmp;
                    flag=true;
                    break;
                }
            }
                //如果遇到比自己小的,就在后方插入
                //如果一直没插入就插入在首位
                if (isInsert==false){ //!isInsert
                   a[0]=tmp;
                }
            }
        System.out.println(Arrays.toString(a));
        }
  1. 冒泡排序
冒泡排序对数组进行排序
public static void main(String[] args) {
        int[] a={121,100,48,78,89,45,22,75,33};
        //定义循环次数
        for (int i = 0; i <a.length-1 ; i++) {
            //循环比较的过程
            for (int j = 0; j < a.length-1-i; j++) {
                if (a[j]>a[j+1]){  //前一个比后一个大,则不满足升序
                   //进行交换
                    int tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }

六、 二分法查找数据

源码

  public static void main(String[] args) {     
       int start=0;
       int end=a.length;
       while(true){
            int mid=(start+end)/2;
            if (start>end){
                break;
            }
            if (start==end){
                if (start>=a.length||end<0){
                    break;
                }
                System.out.println("未找到");
                break;
            }
            if (a[mid]==num){
                System.out.println("在下标为:"+mid+"的位置找到数值:"+num);
                break;
            }else if(a[mid]<num){
                start=mid+1;
            } else{
                end=mid-1;
            }
        }
   }     

快捷选项

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要查找的数字");
        int num=sc.nextInt();
        int[] a={1,5,10,12,20,25,27,30};
        int result=Arrays.binarySearch(a,num);
        System.out.println(result<0?"没找到":"在下标为"+result);

本文地址:https://blog.csdn.net/timicai/article/details/107346130

《一维数组及经典应用.doc》

下载本文的Word格式文档,以方便收藏与打印。