首页 > 编程语言 >Java入门基础-数组

Java入门基础-数组

时间:2024-07-07 15:00:04浏览次数:16  
标签:arr 遍历 Java 入门 int length 数组 变量

Java入门基础-04数组

本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记

Java入门基础课程视频地址

上一章:Java入门基础-03程序流程控制

目录

一、认识数组

数组是什么?

数组就是一个容器,用来存一批同种类型的数据。

如:

int[ ] arr = {20, 10, 30, 80, 90}

String[ ] names = {“牛二”, “西门”, “李三”}

二、数组的定义和访问

1.静态初始化数组

  • 定义数组的时候直接给数组赋值

静态初始化数组的格式:

 // 完整格式
 // 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3,....};
 int[] ages = new int[]{12, 16, 24, 28};
 double[] scores = new double[]{78.8, 89.0, 57.2, 95.5};

 // 简化格式
 // 数据类型[] 数组名 = {元素1, 元素2, 元素3,....};
 int[] ages2 = {14, 16, 17, 19};

注意:

  • “数据类型[ ] 数组名" 也可以写成”数据类型 数组名[ ]“。 但一般不用这种写法
  • 什么类型的数组只能存放什么类型的数据。

数组属于引用数据类型,数组变量名中存储的是数组在内存中的地址信息。

数组的访问

访问数组的元素的格式: 数组名称[ 索引 ]

 // 数组的访问
        // 格式:数组名称[ 索引 ]
        int[] arr = {10, 20, 30};
        // 取值
        System.out.println(arr[0]);
        // 赋值
        arr[2] = 45;
        System.out.println(arr[2]);

运行结果:

在这里插入图片描述

数组的长度属性:length

// 获取数组的长度(就是数组元素的个数)
        System.out.println(arr.length);
  • 数组的最大索引表示:数组名.length - 1 // 前提:元素个数大于0,否则会报错。
  • 如果访问数组时,使用的索引超过了数组的最大索引,执行程序时会出bug,会出现一个索引越界的异常提示。

数组的遍历

  • 遍历:就是一个一个数据的访问
  • 遍历使用场景:求和,元素搜索,找最大值、最小值等。
        // 数组的遍历
        int[] arr2 = {30, 20, 40, 49};
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }

运行结果:

在这里插入图片描述

案例训练

  1. 数组遍历-求和

需求:某部门5名员工的销售额分别是:16,26,36,6,100,请计算出他们部门的总销售额 。

代码:

 		// 求和
        // 需求:某部门5名员工的销售额分别是:16,26,36,6,100,请计算出他们部门的总销售额 。
        // 1. 定义一个数组存储5名员工的销售额
        int[] money = {16, 26, 36, 6, 100};
        // 索引:        0   1   2   3   4
        
        // 3.定义一个变量用于累加求和
        int sum = 0;
        
        // 2. 遍历这个数组的每一个数据
        for (int i = 0; i < money.length; i++) {
            sum += money[i];
        }
        System.out.println("部门的总销售额:" + sum);
    }

运行结果:

在这里插入图片描述

2.动态初始化数组

  • 定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度。
  • 格式:

数据类型[ ] 数组名 = new 数据类型[长度];
int[ ] arr = new int[3];
赋值:
arr[0] = 12;

温馨提示:

  • 静态初始化和动态初始化数组的写法是独立的,不可以混用。

错误示范:

int[ ] arr = new int[3] {20, 30, 40};

动态初始化数组元素默认值规则:

在这里插入图片描述

两种数组定义的方法各自适合什么业务场景?

  • 动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景。
  • 静态初始化:适合一开始就知道要存入哪些元素值的业务场景。

案例训练

评委打分案例:

需求:某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分做为选手得分。

代码:

    public static void main(String[] args) {
        // 需求:某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分做为选手得分。

        // 1.定义一个动态初始化数组,负责后期存储6个评委的打分
        double[] scores = new double[6];

        Scanner sc = new Scanner(System.in);

        // 2.遍历数组中的每个位置,录入评委的分数,存入到数组中去
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个评委的评分:");
            double score = sc.nextDouble();
            scores[i] = score;
        }

        // 3.遍历数组的每个元素进行求和
        double sum = 0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }
        System.out.println("选手最终得分为:" + (sum / scores.length));
    }

运行结果:

在这里插入图片描述

三.数组在计算机中执行的原理

1. 数组的执行原理,Java程序的执行原理

在这里插入图片描述
1、运行一个Java程序,主要看JVM中包含的哪几部分内存区域?

  • 方法区
  • 栈内存
  • 堆内存

2、 简单说说 int a = 20; int[] arr = new int[3]这两行代码的执行原理?

  • a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
  • new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
  • arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。

2. 多个变量指向同一个数组的问题

1、多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?

  • 多个数组变量中存储的是同一个数组对象的地址。
  • 多个变量修改的都是同一个数组对象中的数据。

2、 如果某个数组变量中存储的null,代表什么意思?需要注意什么?

  • 代表这个数组变量没有指向数组对象。
  • 可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,会报空指针异常:NullPointerException。

四、专项训练:数组常见案例

数组求最值

需求:求{25, 45, 89, 13, 48, 47} 中最大值

代码:

   		public static void main(String[] args) {
        // 需求:求{25, 45, 89, 13, 48, 47} 中最大值

        // 1,创建数组
        int[] arr = {25, 45, 89, 13, 48, 47};

        // 2.定义一个变量用于最终记住最大值。
        int max = arr[0];

        // 3. 从数组的第二个位置开始遍历。
        for (int i = 0; i < arr.length; i++) {
            // 判断一下当前遍历的这个数据,是否大于最大值max存储的数据。
            if(arr[i] > max){
                max = arr[i];
            }
        }
        System.out.println("最大值为:" + max);
    }

运行结果:

在这里插入图片描述

求数组中的元素最大值,我们是如何实现的?

  • 把数据拿到程序中去,用数组装起来
  • 定义一个变量max用于记录最大值,max变量默认存储了第一个元素值作为参照物
  • 从第二个位置开始遍历数组的数据,如果当前元素大于变量存储的数据,则替换变量存储的值为该元素
  • 循环结束后输出max变量即可

数组反转

需要:某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转。[10, 20, 30, 40, 50] 反转后 [50, 40, 30, 20, 10]

代码:

 	    public static void main(String[] args) {
        // 1. 准备一个数组
        int[] arr = {10, 20, 30, 40, 50};

        // 2. 定义一个循环,设计2个变量,一个在前,一个在后
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            //  arr[i]     arr[j]
            // 交换
            // 1. 定义一个临时变量记住后一个位置处的值。赋值是从右往左
            int temp = arr[j];
            // 2. 把前一个位置处的值赋值给后一个位置了
            arr[j] = arr[i];
            // 3.把临时变量中记住的后一个位置的值赋给前一个位置处
            arr[i] = temp;
        }

        // 3. 遍历数组中的每一个数据,看是否反转成功
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

运行结果:

在这里插入图片描述

1. 我们如何完成数组的反转?

  • 使用for循环,控制让数组的前后位置的元素,依次交换。

2. 数组如何实现前后元素交换的?

  • 定义一个临时变量记住后一个位置处的数组。
  • 再把前一个位置处的元素值,赋值给后一个位置处。
  • 最后把临时变量记住的后一个位置的值赋给前一个位置处。

随机排名

需求:某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。

代码:

    	public static void main(String[] args) {
        // 1.定义一个动态初始化的数组用于存储5名员工的工号
        int[] codes = new int[5];

        // 2. 提示用户录入5名员工的工号
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < codes.length; i++) {
            System.out.println("请输入第" + (i + 1) + "位员工的工号");
            int code = sc.nextInt();
            codes[i] = code;
        }

        // 3. 打乱数组中元素的顺序
        Random r = new Random();
        for (int i = 0; i < codes.length; i++) {
            // 每遍历到一个数据,都随机一个数组索引范围内的值。然后让当前遍历的数据与该索引位置处的值交换
            int index = r.nextInt(codes.length); // 0-4
            // 定义一个临时变量记住index位置处的值
            int temp = codes[index];
            // 把i位置处的值赋值给index位置处
            codes[index] = codes[i];
            // 把temp的值赋值给i位置处
            codes[i] = temp;
        }

        // 4. 遍历数组中的工号输出即可
        for (int i = 0; i < codes.length; i++) {
            System.out.print(codes[i] + " ");
        }
    }

运行结果:

在这里插入图片描述

我们是如何实现随机排名的?

  • 定义一个动态初始化数组用于录入员工的工号。
  • 遍历数组中的每一个元素。
  • 每遍历到一个数据,都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换。
  • 输出数组中的内容即可。

总结:

数组到这里就结束啦,本章知识点有:什么是数组;数组的两种定义,静态初始化数组和动态初始化数组,包含数组的访问与遍历;数组在计算机中运行的原理,内存区域有方法区,栈内存,堆内存;案例有求数组的最值,实现数组反转与随机排名。

下一章:Java入门基础-方法

标签:arr,遍历,Java,入门,int,length,数组,变量
From: https://blog.csdn.net/m0_64126885/article/details/140229417

相关文章

  • Java面试八股之MYISAM和INNODB有哪些不同
    MYISAM和INNODB有哪些不同MyISAM和InnoDB是MySQL数据库中两种不同的存储引擎,它们在设计哲学、功能特性和性能表现上存在显著差异。以下是一些关键的不同点:事务支持:MyISAM不支持事务,没有回滚或崩溃恢复的能力。InnoDB是事务安全型的,支持事务处理、回滚、行级锁定和外键约......
  • Go语言--复合类型之指针与数组
    分类指针指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C++语言中由于对指针的滥用而造成......
  • ArcTs布局入门02——弹性布局(Flex)
    如果你对鸿蒙开发感兴趣,加入“Harmony自习室”吧~......
  • 在linux服务器上平滑发布(蓝绿发布)java项目,不影响现有业务运行
    具体操作使用nginx作为负载均衡,配置upstream(注意修改项目名)upstream项目名{serverlocalhost:7008max_fails=3fail_timeout=30s;serverlocalhost:7009max_fails=3fail_timeout=30s;}启动命令(注意修改jar位置及端口号),后修改为start.sh并......
  • 一文带你了解Java虚拟机垃圾收集器
    如果你的世界,没有痛苦的害怕,没有尊严的担忧,没有富贵的贫贱,没有暖寒的交替,没有外貌的困扰,没有男女的区别,没有你我之分,没有生死顾虑,你才会离"真正的活着"越来越近。——余华《活着》在上一篇内容中我们提到在Java虚拟机中主要是通过标记整理、复制拷贝、标记清除三种算法进行内......
  • [javascript]如何优雅的实现网页自动滚动
    在设计一些网站的时候,考虑到用户腾不开手,不想动的情况,就需要设计一个自动滚动的功能,我不提供gui界面的设计,只提供一个丝滑滚动的源码letscrollPercentage=0.02;//这个变量就是一秒滚动这个滚动节点的视窗的百分之几letscrollState=false;//true为正在滚动letscrollE......
  • 六、数据可视化—flask框架入门(爬虫及数据可视化)
    六、数据可视化—flask框架入门(爬虫及数据可视化)1,数据可视化简介2,flask(1)创建flask项目(2)开启debug模式(3)通过访问路径传递参数(4)加入渲染模板,渲染HTML文件(4-1)普通变量(4-2)列表变量(4-3)字典变量(5)用户表单提交1,数据可视化简介  数据可视化主要旨在借助于图形化手段,清晰......
  • 张高兴的 MicroPython 入门指南:(二)GPIO 的使用
    目录什么是GPIO使用方法使用微动开关点亮板载LED硬件需求电路代码参考什么是GPIOGPIO是GeneralPurposeInputOutput的缩写,即“通用输入输出”。RaspberryPiPico左右两侧各有一列GPIO引脚,Pico通过这两列引脚进行一些硬件上的扩展,与传感器进行交互等等。简单的......
  • IT入门知识第八部分《人工智能》(9/10)
    1.引言在当今数字化时代,人工智能(AI)和机器学习(ML)已成为推动技术革新的关键力量。它们不仅改变了我们与机器的互动方式,还极大地拓展了解决问题的可能性。本文将深入探讨人工智能和机器学习的基础,并分析它们在自然语言处理、计算机视觉和数据挖掘等应用领域的实际影响。2.人工......
  • ctfshow-web入门-文件上传(web151-web160)
    目录1、web1512、web1523、web1534、web1545、web1556、web1567、web1578、web1589、web15910、web1601、web151试了下前端只能传png后缀的将一句话木马改成png后缀,上传后用burpsuite抓包绕过前端检测后,改回php后缀,发包调用:/upload/eval.php?cm......