JAVA的学习笔记day05

数组的介绍

什么是数组

数组指的是一种容器,可以用来存储同种数据类型的多个值

数组容器在存储数据的时候,需要结合隐式转换考虑。

例如:int类型的数组容器 :booean和 doule是不可以存入的 但是byte short int是可以存入的

例如:double类型的数组容器中byte short int longfloat double都是可以存入的

建议:容器的类型,和存储的数据类型保持一致

数组的定义与静态初始化

数组的定义

数组的初始化

初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程

完整格式:数据类型[] 数组名=new 数据类型[]{元素1,元素2, 元素3...);

范例:int[] array = new int[]{11, 22, 33};

double[] array2 = new double[] {11.1, 22.2, 33.3);

简化格式

静态初始化

完整格式:数据类型[] 数组名=new 数据类型[]{元素1,元素2, 元素3...};

简化格式:数据类型[] 数组名={元素1,元素2,元素3...};

复制代码
package demo1;
public class Test2 {
    public static void main(String[] args){
        //定义数组存储5个学生的年龄
        int[] array1 = new int[]{11,12,12,14,13};
        int[] array2 = {11,12,12,14,13};

        //定义数组存储3个学生的姓名
        String[] array3 = new String[]{"张三","李四","王五"};
        String[] array4 = {"张三","李四","王五"};
        
        //定义三个同学的身高
        double[] array5 = new double[]{179.2,198.3,178.4};
        double[] array6 = {179.2,198.3,178.4};
    }
}

数组的地址值

数组的地址值表示数组在内存中的位置

I@b4c966a \[:表示当前是一个数组 在@前面的D表示当前数组里面的元素都是double类的,前面是I表示当前数组里面的元素都是int类型的 @:表示一个间隔符号,这是固定格式 b4c966a:这是数组真正的地址值(十六进制表示) 但是平时习惯将整体\[I@b4c966a作为数组的地址值 ### 数组元素访问 格式:数组名\[索引\]; #### 索引 索引:也叫作下标,角标 索引的特点:从0开始逐个+1增长,连续不间断 ![](https://i-blog.csdnimg.cn/img_convert/36d915aa12567696248a612ba7cdcdf3.png) 利用索引对数组中的元素进行访问 1.获取数组里面的元素 package demo1; public class Test2 { public static void main(String[] args){ int[] array = {11,12,12,14,13}; int number = array[0]; System.out.println(number); } } ![](https://i-blog.csdnimg.cn/img_convert/b0335c306e812df6ffc25ab682d82a7c.png) 2.把数据存储到数组当中 格式:数组名\[索引\]; = 具体数据/变量 package demo1; public class Test2 { public static void main(String[] args){ int[] array = {11,12,12,14,13}; array[0] = 100; System.out.println(array[0]); } } ![](https://i-blog.csdnimg.cn/img_convert/91d8ab351dddddbe5d94931d4ecb8361.png) 赋值的数据会覆盖原来的数据,覆盖后原来的数据就不存在了 ### 数组遍历 **数组遍历:**将数组中所有的内容取出来,取出来之后可以(打印,求和,判断..) **注意:**遍历指的是取出数据的过程,不要局限的理解为,遍历就是打印! 我们可以使用循环来遍历数组 package demo1; public class Test2 { public static void main(String[] args){ int[] array = {11,12,12,14,13}; for(int i =0;i< array.length;i++){ System.out.println(array[i]); } } } ![](https://i-blog.csdnimg.cn/img_convert/f9d45792e724ef955c99d24e0eeade53.png) 在Java当中,关于数组的一个长度属性:length 调用方法:数组名.length 自动的快速生成数组的遍历的方式 数组名.fori 练习: **遍历数组并求和** 定义一个数组,存储1,2,3,4,5 遍历数组得到每一个元素,求数组里面所有的数据和 package demo1; public class Test2 { public static void main(String[] args){ int[] array = {1,2,3,4,5}; int sum = 0; for(int i =0;i< array.length;i++){ sum +=array[i]; } System.out.println("数组里面所有的数据和为:"+sum); } } ![](https://i-blog.csdnimg.cn/img_convert/199ccb5fe9a2a71e21519c70b2df0486.png) **统计个数** 定义一个数组,存储1,2,3,4,5,6,7,8,9,10遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字 package demo1; public class Test2 { public static void main(String[] args){ int[] array = {1,2,3,4,5,6,7,8,9,10}; int count = 0; for(int i =0;i< array.length;i++){ if(array[i]%3==0){ count++; } } //当循环结束后,数组里面的数字就都判断完成了,就可以打印出来有多少个能被3整除 System.out.println("在数组中能被3整除的有"+count+"个"); } } ![](https://i-blog.csdnimg.cn/img_convert/8198c30cb2586fc38030ac8eab9e57bc.png) **变化数据** 定义一个数组,存储1,2,3,4,5,6,7,8,9,10遍历数组得到每一个元素。 要求: 1,如果是奇数,则将当前数字扩大两倍 2,如果是偶数,则将当前数字变成二分之一 package demo1; public class Test2 { public static void main(String[] args){ int[] array = {1,2,3,4,5,6,7,8,9,10}; for(int i =0;i< array.length;i++){ if(array[i]%2==0){ //变成了二分之一后还要赋值给数组 array[i] = array[i]/2; }else{ array[i] = array[i]*2; } System.out.println(array[i]); } } } ![](https://i-blog.csdnimg.cn/img_convert/94783a33a0a4bf99e5300257daa91f49.png) ### 数组的动态初始化 ![](https://i-blog.csdnimg.cn/img_convert/4a4a9762c9fea5d8a2eac0f512d24ff6.png) #### 动态初始化的格式 数据类型\[\] 数组名 = new 数据类型\[数据长度\]; **练习** 定义一个数组,用来存班级中50个学生的注名姓名未知,等学生报道之后,再进行添加。 package demo1; public class Test2 { public static void main(String[] args){ String[] array = new String[50]; //添加学生信息 array[0]="张三"; array[1] = "李四"; array[8] = "王五"; System.out.println(array[0]); } } ![](https://i-blog.csdnimg.cn/img_convert/85483aec587920beb73d2a9be88c7f3c.png) **数组默认初始化值的规律** 整数类型:默认初始化值0 小数类型:默认初始化值0.0 字符类型:默认初始化值'/u0000'也就是空格 布尔类型:默认初始化值 false 引用数据类型:默认初始化值 null #### 数组动态初始化和静态初始化的区别 动态初始化:手动指定数组长度,由系统给出默认初始化值。 只明确元素个数,不明确具体数值,推荐使用动态初始化 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。 需求中已经明确了要操作的具体数据,直接静态初始化即可。 ![](https://i-blog.csdnimg.cn/img_convert/903b29425d7bc9739d5e24be1edd5c0b.png) ### 数组常见问题 1.当访问了数组中不存在的索引,就会引发索引越界异常。 package demo1; public class Test2 { public static void main(String[] args){ int[] array = {1,2,3,4,5}; System.out.println(array[10]); } } ![](https://i-blog.csdnimg.cn/img_convert/28df16d2ae8bc4bb6690f060c1344bcd.png) 这是访问数组中索引第10的元素,但是数组中没有这个元素,所以报索引越界异常错误 在这个报错中知道错误是在第十二行 ### 数组的常见操作 ![](https://i-blog.csdnimg.cn/img_convert/c8857047caaa719665037008102ac9aa.png) #### 求最值 需求:已知数组元素为{33,5,22,44,55} 请找出数组中最大值并打印在控制台 分析: 1.定义max变量准备记录擂台上的变化 int max=arr\[0\]; 2遍历数组获取每一个元素 for(int i =0;i< array.length;i++){ array[i] } 3.让每一个元素跟max进行比较如果找到更大的,就让max记录该元素 for(int i =0;i< array.length;i++){ if(array[i]>max){ max = array[i]; } } 所以代码: package demo1; public class Test2 { public static void main(String[] args){ int[] array = {33,5,22,44,55}; int max =array[0]; for (int i = 1; i < array.length; i++) { if(array[i]>max){ max = array[i]; } } System.out.println(max); } } ![](https://i-blog.csdnimg.cn/img_convert/0a6d6551d213d6f8dc0bc6d08e183232.png) 循环的开始条件如果为0,那么第一次循环的时候是自己跟自己比了一下,对结果没有任何影响,但是效率较低,所以为了提高效率,我们可以将循环开始条件改为1 #### 求和 **遍历数组求和** 需求:生成10个1\~100之间的随机数存入数组。 1)求出所有数据的和 2)求所有数据的平均数 3)统计有多少个数据比平均值小 1.先定义数组,然后将随机数存入数组中 package demo1; import java.util.Random; public class Test2 { public static void main(String[] args){ int[] array = new int[10]; Random r = new Random(); for (int i = 0; i < array.length; i++) { //每循环一次,就会生成一个新的随机数 int number = r.nextInt(100)+1; //把生成的随机数添加到数组中 //数组名[索引] = 数据 array[i] = number; } //1.求出所有数据的和 int sum = 0; for (int i = 0; i < array.length; i++) { sum+=array[i]; } System.out.println("数组中所有数据的和为:"+sum); //2.求所有数据的平均数 int avg = sum/array.length; System.out.println("数组中的平均数:"+avg); //3.统计有多少个数据比平均数小 int count = 0; for (int i = 0; i < array.length; i++) { if(array[i]

相关推荐
luckyzlb2 小时前
02-kafka(01润色版)
java·中间件·kafka
ByNotD0g2 小时前
Tomcat中的回显问题
java·tomcat
IT19952 小时前
C++工作笔记-动态库中的单例类存储方式
开发语言·c++·笔记
云澜哥哥2 小时前
MyBatis 实战指南:特殊符号处理与高效批量操作
java·jvm·mybatis
CRMEB2 小时前
电商项目中订单流程可以使用哪些设计模式?如何开发?
java·设计模式·gitee·开源·php·crmeb
CNAHYZ2 小时前
Apache HttpClient 配置 SSL 证书指南
java·spring boot·http
小陈phd2 小时前
多模态大模型学习笔记(十二)——transformer学习之Embedding
笔记·学习·transformer
格鸰爱童话2 小时前
向AI学习项目技能(三)
java·人工智能·python·学习
weixin199701080162 小时前
南网商城商品详情页前端性能优化实战
java·前端·性能优化