(尚硅谷 Java 学习 b 站大学版)Day.8+好的壁纸网站分享

数组的使用


一维数组的使用

1、 一维数组的声明和初始化

1.1 静态初始化:数组的初始化和数组元素的赋值操作 同时进行

1.2 动态初始化:数组的初始化 和 数字元素的赋值操作 分开进行

Tips:数组一旦初始化完成,长度就确定了

2、如何调用数组的指定位置的元素:通过角标的方式调用。

数组的角标(索引) 是从 零开始的,到数组的长度-1 结束。

3、如何获取数组长度

属性:length

4、如何遍历数组

​ 利用循环

5、数组元素的默认初始值

数组元素没赋值的时候,也会有默认的初始值

默认值们:

​ >数组元素是整型:0

​ > 数组元素是浮点型:0.0

​ >数组元素是 char 类型:0 此零非’0’

​ >数组元素是 boolean 型: false

(最好记住)

​ >数组元素是引用数据类型:null

6、数组的内存解析

内存的一个简化机构

CleanShot 2025-01-24 at 18.59.34@2x

代码展示一下上面在讲什么

public class ArrayTest {
    public static void main(String [] args){
        //一维数组的声明和初始化
        int [] ids; //声明
        ids =new int[]{1,2,3,4,5};  //静态初始化  不同的元素用,隔开

        String[] names= new String[5];//动态初始化
        names[0]="John";
        names[1]="Jackson";
        names[3]="Kiki";
        names[4]="Kera";
        names[2]="Mike";

        System.out.print(names.length); //调用 length函数来测 数组的长度
        System.out.println();

        //遍历整个数组
        for(int i=0;i<names.length;i++){
            System.out.println(names[i]);
        }

    }
}

小例子:从键盘键入 学生的成绩,找出最高分,并输出学生的成绩等级,成绩>=最高分-10 为 A;

成绩>=最高分-20 为 B;成绩>=最高分-30 为 C;其余的都是 D

import java.util.Scanner;
public class ArrayPractice {
    public static void main(String [] args){
        int studentNumber=0; //学生人数

        System.out.println("Enter student number please:");
        Scanner  sc=new Scanner(System.in); //读入学生人数
        studentNumber=sc.nextInt();
        int[] studentGrades=new int[studentNumber]; //创建学生成绩数组

        System.out.println("Enter student grades please:");
        for(int i=0;i<studentNumber;i++){
             studentGrades[i]=sc.nextInt();
        }      //依次读取学生成绩

        int max=0;  //最高成绩
        for(int i=0;i<studentGrades.length;i++){
            if(studentGrades[i]>max){
                max=studentGrades[i];
            }
        }        //找出最高成绩

        System.out.println("最高分为"+max);

        //根据题意  输出题目目标   也可以定义一个 level 表示成绩等级
        for(int i=0;i<studentGrades.length;i++){
            if(studentGrades[i]>=max-10){
                System.out.println("第"+(i+1)+"同学成绩等级为 A");
            }
            else if(studentGrades[i]>=max-20){
                System.out.println("第"+(i+1)+"同学成绩等级为 B");
            }
            else if(studentGrades[i]>=max-30){
                System.out.println("第"+(i+1)+"同学成绩等级为 C");
            }
            else System.out.println("第"+(i+1)+"同学成绩等级为 D");
        }

    }
}

理清题目逻辑,这题目应该挺简单


3.3 多维数组的使用

二维数组居多

对于二维数组的理解,我们可以看作是一维数组 arry1 又作为另一个一维数组 arry2 的元素而存在

其实, 从数组的底层运行机制来看,其实没有多维数组

a. 二位数组的使用:

1、二维数组的声明和初始化

见如下代码 please

public class ArrayTest2 {
    public static void main(String[] args){
        //1、二维数组的声明和初始化
        int [][] arr=new int[][]{{1,2,3},{2},{5,6,7}};//静态初始化

        //动态初始化1
        String[][] arr2=new String[3][2]; //3为 行数  2为列数
        //动态初始化 2
        String [][] arr3=new String[3][]; //列数可以不写  行数必须写   前面的[][]可以放在变量名后或者两边

    }
}

2、如何调用数组的指定位置的元素

[][ ] 第一个行数 第二个表列数

3、如何获取数组的长度

arr.length 即 这个 arr 的行数 arr[0].length 求 这个第一行的列数

4、如何遍历数组

​ 二维数组两层for 循环嵌套 三维数组即三层 for 循环 以此类推

​ 假设有 arr[4] [5]数组

For(i=0;i<arr.length;i++)

​ for(int j=0;j<arr[i].length;j++)

5、数组元素的默认初始值

arr[] 初始值是 地址值

arr[]【】:初始值和上面的默认初始值一样

编程练习 杨辉三角

打印一个 10 行的杨辉三角

public class YangHuiTriangle {
    public static void main(String[] args){
        int [][] yanghui=new int [10][10]; //杨辉三角的数组
        for(int i=0;i<10;i++){
            for(int j=0;j<=i;j++){
                if(i<2) {
                    yanghui[i][j] =1;    //确定前两行
                }

                else if (j==0||j==i){
                    yanghui[i][j]=1;   //确定第一个和最后一个
                 }else yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
            }
        }
        for(int i=0;i<10;i++){
            for(int j=0;j<=i;j++){
                System.out.print(yanghui[i][j]+"\t");
            }
            System.out.println();
        }

    }
}

这个算法是我自己写的,感觉逻辑挺简单的,但是代码有点冗余,同时数组也有内存空间的浪费;可以进行一定的优化。

优化一 省一部分内存空间

public class YangHuiTriangle {
    public static void main(String[] args){
        int [][] yanghui=new int [10][];
        for(int i=0;i<10;i++){
            yanghui[i]=new int[i+1];    //防止空指针的产生  这一步非常关键 值得反复品味
            for(int j=0;j<=i;j++){ 

                if(i<2) {
                    yanghui[i][j] =1;
                }
                else if (j==0||j==i){
                    yanghui[i][j]=1;
                 }else yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
            }
        }
        for(int i=0;i<10;i++){
            for(int j=0;j<=i;j++){
                System.out.print(yanghui[i][j]+"\t");
            }
            System.out.println();
        }

    }
}

优化二:减少代码量

public class YanghuiTrianglePro {
    public static void main(String [] args){
        int [][] yanghui=new int [10][];
        for(int i=0;i<10;i++){
            yanghui[i]=new int [i+1];
            yanghui[i][0]=1; //保证每行第一个为1 
            yanghui[i][i]=1; //保证每行最后一个为 1
            //此处的 if 可以不用写
            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];
                }
            }
        }

        for(int i=0;i<10;i++){
            for(int j=0;j<yanghui[i].length;j++){
                System.out.print(yanghui[i][j]+"\t");
            }
            System.out.println();
        }
    }
}


3.4 数组中涉及到的常见算法

1、数组元素的赋值(杨辉三角、回形数等)

2、求数值型数组中元素的最大值、最小值、平均值、总和等

3、数组的复制、反转、查找(线性查找、二分查找)

4、数组元素的排序算法


总结

今日学习时间一般,不过认真敲了敲代码,也还算有点成就感,不过对于算法之后还需要好好努力,有很多地方非常菜,也算是还之前的债了。
今日发现一个贼好的免费的壁纸网站无广告放心使用
www.haowallpaper.com

革命尚未成功,同志仍需努力!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值