知识回顾随笔(二)

数组

在编写代码时,会有相同类型的数值,如果每次都声明类型会显得很麻烦,那我们可不可以把相同类型的数据放在一起呢?答案是可以的,这里就会用到我们本节要回顾的知识点--------数组,话不多说,进入正题。

数组的概念

数组可以理解为一组类型相同,长度固定的数据集合。

数组的定义

1.第一种定义方式

int[] array=new int[5];

2.第二种定义方式

int[] array2=new int[]{1,2,3,4,5}

3.第三种定义方式

int[] array3={1,2,3,4,5}
数组的遍历
  1. for循环
    //案例:输入5名学员的java成绩,并求出平均数。
    public static void main(String[] args) {
        double arry[]=new double[5];//定义数组和数组的长度
        Scanner sc=new Scanner(System.in);
        double sum=0;
        for (int i = 0; i <arry.length; i++) {
            System.out.println("请输入第"+(i+1)+"名学生的Java成绩:");
            arry[i]=sc.nextDouble();//为数组元素赋值
            sum+=arry[i];//累加数组中的元素
        }
        System.out.println("这五名学员的平均java成绩为:"+(sum/5));
    }
  1. while循环
      //打印出数组的所有元素。
        int[] arry=new int{1,2,3,4,5};
        //while循环
         int i=0;
        while (i<arry.length){
            System.out.print(arry[i]+"\t");
            i++;
        }
        System.out.println();

3 foreach遍历

float[] arrf=new float[7];//定义数组,并声明长度
        arrf[2]=67.9f;//给第三个赋值,从0开始,所以第3个就等于arrf[3-1],同下
        arrf[4]=56.4f;
        for (float f:arrf) {
            System.out.println(f);
        }

数组的复杂应用

打印*图案

1.打印矩形图案

    //打印边长为5的矩形
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j <5 ; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }

2.打印平行四边形

 for (int i = 0; i<5; i++) {
            //打印空格
            for (int j =0; j<5-i; j++) {
                System.out.print(" ");
            }
            //打印*号
            for (int k = 0; k <5; k++) {
                System.out.print("*");
            }
            System.out.println();
        }

3.打印三角形

 for (int i = 0; i <5 ; i++) {
            System.out.print(" ");
            //打印空格
            for (int j = 0; j <5-i; j++) {
                System.out.print(" ");
            }
            //打印*号
            for (int k = 0; k <2*i-1 ; k++) {
                System.out.print("*");
            }
            System.out.println();
        }

4.打印菱形

  // 上半部分
        for (int i = 0; i <5 ; i++) {
            System.out.print(" ");
            //打印空格
            for (int j = 0; j <5-i; j++) {
                System.out.print(" ");
            }
            //打印*号
            for (int k = 0; k <2*i-1 ; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
         //下半部分
        for (int i = 0; i <5 ; i++) {
            System.out.print(" ");
            //打印空格
            for (int j = 0; j <i; j++) {
                System.out.print(" ");
            }
            //打印*号
            for (int k = 0; k <9-2*i; k++) {
                System.out.print("*");
            }
            System.out.println();
        }

5.打印空心菱形

  //上半部分
        for (int i = 1; i <= 5; i++) {
            //每一行的空格数
            for (int j = 1; j <=5-i ; j++) {
                System.out.print("  ");
            }
            //每一行的*
            for (int j = 1; j <=2*i-1 ; j++) {
                if(j==1||j==2*i-1){
                    System.out.print("* ");
                }else {
                    System.out.print("  ");
                }

            }
            System.out.println();//换行
        }
        //下半部分
        for (int i = 1; i <= 5; i++) {
            //每一行的空格数
            for (int j = 1; j <=i ; j++) {
                System.out.print("  ");
            }
            //每一行的*
            for (int j = 1; j <=9-2*i ; j++) {
                if(j==1||j==9-2*i){
                    System.out.print("* ");
                }else {
                    System.out.print("  ");
                }

            }
            System.out.println();//换行
        }
九九乘法表
  //实现99乘法表的打印和输出。
        for (int i =1; i <=9 ; i++) {
            for (int j =1; j <=i; j++) {
                System.out.print(i+"*"+j+"="+i*j+"\t");
            }
            System.out.println();
        }
    }
求数组中的最大值与最小值
 //开发部有15名员工,编写一个程序,
 // 用于接收每个员工的年龄,计算并输出开发部员工的平均年龄,
 // 最大年龄及最小年龄。
        int[] arrage=new int[15];
        Scanner sc=new Scanner(System.in);
        int sum=0;
        int max;
        int min;
        for (int i = 0; i <arrage.length; i++) {
            System.out.println("请输入第"+(i+1)+"名员工的年龄:");
             arrage[i]=sc.nextInt();
             sum+=arrage[i];
        }
        System.out.println("开发部15名员工的平均年龄为:"+sum/15);
        for (int i = 0; i <arrage.length ; i++) {
                max=arrage[0];//初始化,假设第一个是最大的
                min=arrage[0];//初始化,假设第一个是最小的
                if (arrage[i]>max){
                    max=arrage[i];
                }
                if (arrage[i]<min){
                min=arrage[i];
            }
                if (i==arrage.length-1){
                    System.out.println("最大年龄为:"+max);
                    System.out.println("最小年龄为:"+min);
                }
        }

数组中的部分算法

我们存储在数组中的数据有时是无序的,看起来很麻烦,查找元素相对有序的数组要慢很多,所以就有了一些经典的算法,比如冒泡排序,选择排序等等,排完序后查找元素如果一个个遍历效率就会很低,于是就有了二分查找这个算法,我们一起来回顾一下。

冒泡排序

1.排序的原理
冒泡排序可以理解为轻的上浮,重的下沉。下面我举一个例子,有一组数据为:5,2,4,3,1,从第一个数开始比较,若后面的数比前面的数小就交换位置,具体比较过程如下:
第一轮

比较的数交换后
5和22,5,4,3,1
5和42,4,5,3,1
5和32,4,3,5,1
5和12,4,3,1,5

此轮过后已经确定了一个位置,下一轮的比较次数可以减少一次
第二轮

比较的数交换后
2和42,4,3,1,5
4和32,3,4,1,5
4和12,3,1,4,5

此轮过后已经确定了两个位置,下一轮的比较次数可以减少一次
第三轮

比较的数交换后
2和32,3,1,4,5
3和12,1,3,4,5

此轮过后已经确定了三个位置,下一轮的比较次数可以减少一次
第四轮

比较的数交换后
2和11,2,3,4,5

此轮过后已经确定了第四个和第五个位置,比较结束
2.具体的代码实现

 //冒泡排序
         int[] arry={5,2,4,3,1};
        System.out.print("排序前的数组为:");
        for (int i = 0; i <arry.length ; i++) {
            System.out.print(arry[i]+"\t ");
        }
        for (int i = 0; i <arry.length-1 ; i++) {
            for (int j = 0; j <arry.length-1-i ; j++) {
                if (arry[j]>arry[j+1]){
                    int temp=arry[j];
                    arry[j]=arry[j+1];
                    arry[j+1]=temp;
                }
            }
        }
        System.out.println();
        System.out.print("排序后的数组为:");
        for (int s:arry) {
            System.out.print(s+"\t ");
        }
选择排序

1.排序的原理
选择排序的原理是默认每 i 轮的最小值为a[i],如果未排序的元素中有比a[i]的值小的,那么要记录下最下值的位置,每轮比较完成后再交换位置,然后再继续比较。还是用上面的例子,有一组数据:5,2,4,3,1,具体的比较过程如下表:
第一轮默认下标为0的是最小值

比较的数最小值下标
5和21
2和41
2和31
2和14

交换后的数据为:1,2,4,3,5

第二轮默认下标为1的是最小值

比较的数最小值下标
2和41
2和31
2和51

次轮不交换

第三轮默认下标为2的是最小值

比较的数最小值下标
4和33
3和53

交换后的数据为:1,2,3,4,5
第四轮默认下标为3的是最小值

比较的数最小值下标
4和53

交换后的数据为:1,2,3,4,5
2.具体的代码实现

        //选择排序
        //1.定义数组
        int[] arry={5,2,4,3,1};
        //2.确定数组中最小的值的位置
        for (int i = 0; i <arry.length-1; i++) {//轮数
            int index=i;
            for (int j = i; j <=arry.length-1; j++) {
                if (arry[j]<arry[index]){
                    index=j;
                }
            }
            //3.比较完后交换最小值的位置
            int temp=arry[i];
            arry[i]=arry[index];
            arry[index]=temp;
        }
        for (int m:arry) {
            System.out.print(m+"\t");
        }
二分查找

1.查找原理
二分查找就是先对半分割,再进行比较,如果要找的数字比中间值大就在右边找,相反的,就在左边查找。依次类推,最后找到要查找的元素,不过前提是数组中的元素必须要是有序的,不然二分查找就毫无意义。以一组有序的数据为例:1,2,3,4,5,6 ;假设我要找的数字是5,用二分法的具体过程如下:

左区间下标中间值下标右区间下标
025
345

2.具体的代码实现

 int[] arry={5,2,1,3,4,6};
        Arrays.sort(arry);
        System.out.println("升序后的数组为:");
        for (int s:arry) {
            System.out.print(s+"\t");
        }
        System.out.println();
        //2.二分查找,定义中间变量,确定每次比较的范围
        int low=0;
        int height=arry.length-1;
        int mid;
        boolean isFind=false;
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你要查找的数字:");
        int usernum=sc.nextInt();
        while (low<=height){//左区间与右区间重合时结束循环
            mid=(low+height)/2;
            if (usernum==arry[mid]){
                System.out.println(usernum+"的位置在第"+(mid+1)+"个");
                isFind=true;
                break;
            }
            if (usernum>arry[mid]){
                low=mid+1;
            }if (usernum<arry[mid]){
                height=mid-1;
            }
        }
        if (!isFind){
            System.out.println("您要查找的数字没有找到!");
        }

二维数组

二维数组与一维数组类似,也是固定类型和固定长度的一组数据,下面进行一些简单的回顾。

二维数组的定义

1.第一种方式

  int[][] array=new int[2][3];//表示包含2个长度为3的一维数组

2.第二种方式

int[][] array2=new int[][]{{1,2,3},{4,5,6},{7,8,9}};

3.第三种方式

 int[][] array3={{1,2,3},{4,5,6},{7,8,9}};
二维数组的应用
杨辉三角
            int[][] YangHui=new int[10][10];
        for (int i = 0; i <YangHui.length ; i++) {
            YangHui[i]=new int[i+1];//
            YangHui[i][0]=1;//确定每行的第一个数值是1
            YangHui[i][i]=1;//确定每行的最后一个数值是1
            if (i>1){
                for (int j = 1; j <YangHui[i].length-1; j++) {
                    YangHui[i][j]=YangHui[i-1][j-1]+YangHui[i-1][j];//从第二行开始,除了首尾,每个元素的值等于上一行的前一个数加上上一行的同等位置的数
                }
            }
        }

本节的回顾到这里就告一段落,别走开,未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值