欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一维数组及经典应用

程序员文章站 2022-10-04 08:32:28
一、数组的定义数组是一个变量,存储相同数据类型的一组数据;数组的下标由0开始向上递增。数组的声明,分配空间和赋值public static void main(String[] args) { //声明 int[] a; String b[]; double []c; //分配空间 ,使用new关键字来分配空间,new关键字在java语言中优先级最高 a=new int[5]; b=new...

一、数组的定义

数组是一个变量,存储相同数据类型的一组数据;
数组的下标由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