重学Java 7 数组Arr.1

我欲与君相知,长命无绝衰

                        ——24.1.16

一、数组的定义

1.概述:数组是一个容器,数组本身属于引用数据类型

2.作用:一次存储多个数据

3.特点:

        ①既可以存储基本类型的数据,也可以存储引用类型的数据

        ②定长(定义数组时的长度为多长,最多能存在多少个数据)

4.定义:

        ①动态初始化:在定义数组的时候,我们没有给具体的数据,只指定了长度

           数据类型[ ] 数组名 = new 数据类型[长度]

           数据类型 数组名[ ] = new 数据类型[长度]

                各部分解释:

                        等号左边的是数据类型,规定了数组中只能存储什么类型的数据

                        [ ]:代表的是数组,一个[ ]一维数组,两个[ ]代表二维数组

                        数组名:自己取的名字(小驼峰)

                        new:代表的是创建数组

                        等号右边的数据类型,要和等号左边的数据类型保持一致

                        [长度]:指定数组长度,规定了数组最多能存多少个数据

        ②静态初始化:在定义数组的时候,我们直接给出了数据

                数据类型[ ] 数组名 = new 数据类型[ ]{元素1,元素2,……} -> 不推荐使用

                数据类型 数组名[ ] = new 数据类型[ ]{元素1,元素2,……} -> 不推荐使用

        ③简化的静态初始化:

                数据类型[ ] 数组名 = {元素1,元素2,……} -> 推荐使用

5.动态初始化和静态初始化的区别:

        ①动态初始化:定义的时候只指定了长度,没有存具体的数据

                                 当只知道长度,但不知道具体数据时,可以使用动态初始化

        ②静态初始化:定义的时候就直接知道存什么数据

public static void main(String[] args) {//动态初始化int[] arr1 = new int[3];char[] arr2 = new char[5];String[] arr3 = new String[7];//静态初始化 -> 简化int[] arr4 = {1,1,4};//只属于初始化,没有定长String[] arr5 = {"lcl","一切都会好的","万事胜意"};
}

二、数组操作

1.获取数组的长度

1.格式:

        数组名.length

2.注意:

        length后不要带小括号,length不是数组中的方法,而是数组中的一个属性

    public static void main(String[] args) {String[] arr1 = {"迪迦奥特曼","猫和老鼠","花园宝宝","海绵宝宝","圣斗士星矢","百变小樱魔术卡","喜羊羊与灰太狼"};int len = arr1.length;System.out.println("len = " + len);}

2.索引

1.概述“元素在数组中存储的位置(编号,下标)

2.特点:

        ①索引唯一

        ②索引都是从0开始的,最大索引是数组长度 - 1

3.索引的作用:

        我们将来操作元素,必须通过索引来操作

        存数据,要指出索引

        取数据,要指定索引

        查数据,要指定索引

3.存储数据

1.格式:

        数组名[索引值] = 值 -> 将等号右边的数据放在数组索引的位置上

    public static void main(String[] args) {//定义一个数组int[] arr = new int[3];arr[0] = 100;arr[1] = 200;arr[2] = 300;String[] arr2 = new String[3];arr2[0] = "张三";arr2[1] = "李四";arr2[2] = "王五";}

案例1

    public static void main(String[] args) {//定义数组,长度为3int[] arr = new int[3];//创建Scanner对象Scanner sc = new Scanner(System.in);//键盘录入,将数据存储在数组中
//        arr[0] = sc.nextInt();
//        arr[1] = sc.nextInt();
//        arr[2] = sc.nextInt();for (int i = 0; i < arr.length; i++) {arr[i] = sc.nextInt();}}

案例2

    public static void main(String[] args) {//定义数组,长度为3int[] arr = new int[3];//创建Random对象Random rd = new Random();//将0~9之间随机一个整数,存储到数组中
//        arr[0] = rd.nextInt();
//        arr[1] = rd.nextInt();
//        arr[2] = rd.nextInt();for (int i = 0; i < arr.length; i++) {//random范围:左闭右开arr[i] = rd.nextInt(10);}}

4.获取数据

1.格式:

        数组名[索引值]

2.细节说明

        ①直接输出数组名,会输出数组在内存中的地址值

        ②地址值:数组在内存中的一个身份证号,唯一标识,我们可以通过这个唯一标识到内存中能找到这个数组,从而操作这个数组中的数据

        ③如果数组中没有存数据,那么直接获取也能获取出来一些数据(元素的默认值)

                整数:0       

                小数:0.0       

                字符:'\u0000' -> 对应的int值是0       

                布尔:false                      

                引用:null

    public static void main(String[] args) {int[] arr = new int[3];//直接输出数组名,会输出数组在内存中的地址值System.out.println(arr);//数组名[索引值],如果数组中没有存数据,那么直接获取也能获取出来一些数据(元素的默认值)System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);}

5.遍历数组 

将数组中元素全部打印:

    public static void main(String[] args) {int[] arr = new int[3];//存数据arr[0] = 100;arr[1] = 200;arr[2] = 300;//输出数组arr地址System.out.println(arr);//输出数组元素System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println();//创建字符串数组String[] arr1 = new String[3];//输出数组arr1地址System.out.println(arr1);//存数据arr1[0] = "张无忌";arr1[1] = "张三丰";arr1[2] = "张翠山";System.out.println(arr1[0]);System.out.println(arr1[1]);System.out.println(arr1[2]);}

此种方式当数组元素过多时,十分复杂 

1.遍历:将元素从数组中一个一个的获取出来(循环)

 //遍历,数组多长,就循环多少次for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}for (int j = 0; j < arr1.length; j++) {System.out.println(arr1[j]);}

三、操作数组时两个常见的问题

1.数组索引越界异常_ArrayIndexOutOfBoundsException

①原因:

        操作的索引超出了数组索引范围

    public static void main(String[] args) {int[] arr = new int[3];arr[0] = 100;arr[1] = 200;arr[2] = 300;arr[3] = 400;}

    public static void main(String[] args) {int[] arr = new int[3];arr[0] = 100;arr[1] = 200;arr[2] = 300;//arr[3] = 400;//超出了arr的索引范围for (int i = 0; i < 4; i++) {System.out.println(arr[i]);}}

2.空指针异常_NullPinterException

①原因:

        当一个对象为null时,在调用此对象中的其他成员

    public static void main(String[] args) {int[] arr = new int[3];System.out.println(arr.length);arr = null;System.out.println(arr.length);}

以上两个问题我们只需知道原因即可

四、数组练习

练习1

求出数组中的元素最大值(元素和元素之间作比较,每次都取较大值,比到最后,最大值就出来了)

步骤:

        ①定义一个max,接收两个元素比较之后的较大值

        ②遍历数组,将每一个元素获取出来进行比较

        ③判断,如果max小于遍历出来的元素,证明遍历出来的元素大,就将大的重新赋值给max

        ④直接输出max

    public static void main(String[] args) {int[] arr = {5,4,6,9,8,7,3,1,2,5};//①定义一个max,接收两个元素比较之后的较大值int max = arr[0];int i;//②遍历数组,将每一个元素获取出来进行比较for (i = 0; i < arr.length; i++) {//③判断,如果max小于遍历出来的元素,证明遍历出来的元素大,就将大的重新赋值给maxif(arr[i]>max){max = arr[i];}}//④直接输出maxSystem.out.println(max);}

练习2

随机产生10个[0,100]之间的整数,统计既是3又是5的倍数的个数

步骤:

        ①创建Random对象,用于生成随机数

        ②定义一个数组,长度为10

        ③定义一个遍历count,用于统计符合条件的数据个数

        ④遍历数组,判断元素是否符合指定的条件,如果符合,count++

        ⑤输出count

    public static void main(String[] args) {//①创建Random对象,用于生成随机数Random rd = new Random();//②定义一个数组,长度为10int arr[]=new int[10];//③定义一个遍历count,用于统计符合条件的数据个数int count = 0;//④遍历数组,判断元素是否符合指定的条件,如果符合,count++for (int i = 0; i < arr.length; i++) {arr[i]= rd.nextInt(101);if(arr[i]%3==0&&arr[i]%5==0){count++;}}//⑤输出countSystem.out.println("count = " + count);}

练习3

1.定义一个数组 int[ ] arr = {1,2,3,4}

2.遍历数组,输出元素按照[1,2,3,4]

    public static void main(String[] args) {int[] arr = {1,2,3,4};System.out.print("[");for (int i = 0; i < arr.length; i++) {if(i==arr.length-1){System.out.print(arr[i]);}else {System.out.print(arr[i] + ",");}}System.out.print("]");}

练习4

随机统计50个1~100之间的整数,统计偶数个数

步骤:

        ①创建Random对象

        ②定义长度为50的数组

        ③随机50个存储到数组中

        ④定义count,用于统计

        ⑤遍历数组,判断,如果是偶数,count++

        ⑥输出count

    public static void main(String[] args) {//①创建Random对象Random rd = new Random();//②定义长度为50的数组int arr[] = new int[50];//③定义count,用于统计int count =0;for (int i = 0; i < arr.length; i++) {//④随机50个存储到数组中arr[i] = rd.nextInt(100)+1;//⑤遍历数组,判断,如果是偶数,count++if(arr[i]%2==0){count++;}}//⑥输出countSystem.out.println("count = " + count);}

练习5

键盘录入一个整数,找出整数在数组中存储的索引位置

步骤:

        ①创建scanner对象

        ②定义数组,随便存几个数据

        ③定义一个变量,此变量用来表示数组中是否有要查找的数据

        ④遍历数组,在遍历的过程中判断是否和录入的数相等,如果相等,则输出索引

    public static void main(String[] args) {//①创建scanner对象Scanner sc = new Scanner(System.in);System.out.println("请您输入一个数");int num = sc.nextInt();//②定义数组,随便存几个数据int[] arr = {54,36,27,18,45,63,72,81,9};//③定义一个变量,此变量用来表示数组中是否有要查找的数据int flag = 0;//④遍历数组,在遍历的过程中判断是否和录入的数相等,如果相等,则输出索引for (int i = 0; i < arr.length; i++) {if(arr[i]==num){System.out.println(i);flag = 1;break;}}if(flag == 0){System.out.println("数组中没有这个值");}}

五、数组高级使用

练习1 数组复制

1.如果arr索引值在等号右边,证明是获取值,如果在等号左边,证明是存值

        arr[0] = 100;

2.arr1[i] = arr2[i] -> 先看等号右边的,相当于将arr2数组的索引上的数据,保存到arr1数组的0索引上

    public static void main(String[] args) {int[] arr1 = {1,2,3,4};int[] arr2 = new int[4];for (int i = 0; i < arr1.length; i++) {arr2[i] = arr1[i];}for (int i = 0; i < arr2.length; i++) {System.out.print(arr2[i]+" ");;}}

练习2 数组扩容

数组扩容

        定义一个数组:int[] arr1 = {1,2,3,4,5},将数组由原来的长度扩容到10

    public static void main(String[] args) {int[] oldArr = {1,2,3,4,5};//创建新数组int[] newArr = new int[10];//将老数组中的元素赋值给新数组中for (int i = 0; i < oldArr.length; i++) {newArr[i] = oldArr[i];}//将新数组的地址值给老数组oldArr = newArr;System.out.println(oldArr.length);for (int i = 0; i < oldArr.length;i++) {System.out.print(oldArr[i]+" ");}}

 

练习3 数组合并 

数组合并

        int[] arr1 = {1,2,3}

        int[] arr2 = {4,5,6}

    public static void main(String[] args) {int[] arr1 = {1,2,3};int[] arr2 = {4,5,6};//创建新数组int[] arr3 = new int[arr1.length+ arr2.length];//先将arr1的元素放到arr3中for (int i = 0; i < arr1.length; i++) {arr3[i] = arr1[i];}//由于我们已经保存了arr1中的三个元素//所以我们保存arr2元素时,就不能从arr3的索引0开始了,不然从arr1中保存的元素会被arr2的元素覆盖//arr2的元素需要从arr3的索引3开始保存int j = 0;for (int i = arr1.length; i < arr3.length; i++) {arr3[i] = arr2[j];j++;}for (int i = 0; i < arr3.length; i++) {System.out.print(arr3[i]+" ");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试】学习笔记-统一测试数据平台

这篇文章主要探讨全球大型电商企业中关于准备测试数据的最佳实践&#xff0c;从全球大型电商企业早期的测试数据准备实践谈起&#xff0c;分析这些测试数据准备方法在落地时遇到的问题&#xff0c;以及如何在实践中解决这些问题。其实&#xff0c;这种分析问题、解决问题的思路…

mathtype2024版本下载与安装(mac版本也包含在内)

安装包补丁主要是mathtype的安装包&#xff0c;与它的补丁。 详细安装过程&#xff1a; step1&#xff1a; 使用方法是下载完成后先安装MathType-win-zh.exe文件&#xff0c;跟着步骤走直接安装就行。 step2&#xff1a; 关闭之后&#xff0c;以管理员身份运行MathType7PJ.exe…

CF1178F2 Long Colorful Strip 题解 搜索

Long Colorful Strip 传送门 题面翻译 题目描述 这是 F 题的第二个子任务。F1 和 F2 的区别仅在对于 m m m 和时间的限制上 有 n 1 n1 n1 种颜色标号从 0 0 0 到 n n n&#xff0c;我们有一条全部染成颜色 0 0 0 的长为 m m m 的纸带。 Alice 拿着刷子通过以下的过…

Java设计模式之原型模式详解

Java设计模式之原型模式详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在今天的篇章中&#xff0c;我们将揭开Java设计模式中的另一面纱——原型模式。这个模式…

一、ArcGIS Pro SDK for Microsoft .NET 开发环境配置

ArcGIS Pro二次开发需要的工具&#xff1a; 1.Visual Studio 2.ArcGIS Pro SDK 一、Visual Studio安装 经过查阅资料&#xff0c;ArcGIS Pro3.0版本需要安装Visual Studio2022版&#xff0c;因为只有22版的才会有有ArcGIS Pro3.0以上版对应ArcGIS Pro SDK&#xff0c;因此&…

sqlserver->clickhouse迁移数据

网上看了很多cdc的方案&#xff0c;说实在的&#xff0c;flink也不好弄&#xff0c;主要是驱动。 flink sql中的方案&#xff0c;好不容易弄到了所有的驱动&#xff0c;结果&#xff0c;字段非常难搞&#xff0c;例如uuid对应flink的String&#xff0c;结果执行flink sql的时候…

vue的sync语法糖的使用

Vue的.sync语法糖是一个用于双向数据绑定的指令&#xff0c;可以在子组件中用来监听父组件传递下来的props的变化&#xff0c;并在需要的时候发出一个自定义事件来通知父组件进行数据更新。 在Vue中&#xff0c;.sync语法糖的使用方法如下&#xff1a; 在父组件中&#xff0c…

第十一部分 隐含规则 (一)

目录 一、使用隐含规则 二、隐含规则一览 1、编译 C 程序的隐含规则 2、编译 C程序的隐含规则 3、编译 Pascal 程序的隐含规则 4、编译 Fortran/Ratfor 程序的隐含规则 5、预处理 Fortran/Ratfor 程序的隐含规则 6、编译 Modula-2 程序的隐含规则 7、汇编和汇编预处理…

如何编译openssl的早期版本的共享库,如openssl 1.0

背景介绍 最近在为客户排查问题的时候&#xff0c;发现客户提供的日志是加密的&#xff0c;解密工具依赖到了openssl 1.0的共享库。可是手头没有这么老版本的openssl共享库。因此只好手动编译一个出来。 编译步骤 因为openssl 1.0是比较老的版本&#xff0c;很多系统上的库已…

常用Java代码-Java中的注解处理器(Annotation Processing)

注解处理器&#xff08;Annotation Processing&#xff09;是Java编译时的一种机制&#xff0c;它允许开发者在源代码上添加注解&#xff0c;并通过注解处理器生成源代码、报告编译器错误或警告、或者进行其他编译时操作。 在Java中&#xff0c;注解处理器通常使用Java的反射和…

新能源汽车智慧充电桩解决方案:智慧化综合管理与数字化高效运营

一、方案概述 TSINGSEE青犀&触角云新能源汽车智慧充电桩解决方案基于管理运营平台&#xff0c;覆盖业务与应用、数据传输与梳理、多端开发、搭建等模块&#xff0c;融合AI、5G、Wi-Fi 、移动支付等技术&#xff0c;实现充电基础设施由数字化向智能化演进&#xff0c;通过构…

【算法题】57. 插入区间

题目 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。 示例 1&#xff1a; 输入&#xff1a;intervals …

翻译: Pyenv管理Python版本从入门到精通一

你是否经常在管理系统上多个Python版本时遇到困难&#xff1f;这可能是一个艰巨的任务&#xff0c;尤其是在处理需要不同Python版本的不同项目时。 但别担心&#xff0c;有一个解决方案&#xff1a;pyenv。就像一个熟练的杂技演员&#xff0c;pyenv可以轻松处理多个Python版本…

Vue插槽(slot)的使用

Vue插槽(slot)是一种强大的功能&#xff0c;它允许您在组件模板中插入自定义内容。插槽可以让你更灵活地构建组件&#xff0c;以满足不同的使用场景。 使用说明&#xff1a; 定义插槽&#xff1a;在组件模板中&#xff0c;使用<slot>标签来定义插槽。使用插槽&#xff…

连接超时的问题

连接超时的问题 通用第三方工具连接超时 connect timeout 方案一&#xff1a; /etc/ssh/sshd_config node1上操作&#xff0c;图是错的 方案二&#xff1a; windows上Hosts文件域名解析有问题 比如&#xff1a; 192.168.xx.100 node1 192.168.xx.161 node1 两个都解析成node…

绝地求生:【PC】未授权程序使用行为的相关公告

各位玩家大家好&#xff0c; 最近闲游盒通过PUBG玩家社区收到了关于未授权程序的举报&#xff0c;举报称有人在游戏内使用了能测量玩家间的距离并辅助迫击炮射击的未授权辅助程序。为此&#xff0c;我们想就该事项向大家进行如下公告&#xff1a; 使用此类未授权程序的行为违反…

23/76-LeNet

LeNet 早期成功的神经网络。 先使用卷积层来学习图片空间信息。 然后使用全连接层转换到类别空间。 #In[]LeNet,上世纪80年代的产物,最初为了手写识别设计from d2l import torch as d2l import torch from torch import nn from torch.nn.modules.loss import CrossEntropyLos…

无法加载操作系统,原因是关键系统驱动程序丢失或包含错误

bcdboot c:\windows /l zh-cn 用这个命令解决了,没有进入时候蓝屏了,不知道为什么 问题 无法加载操作系统,原因是关键系统驱动程序丢失或包含错误上午因为有点事就没有像往常一样打开电脑,下午回到家休息了一会本来准备打开电脑开始我愉快地下午生活,没想到一个自动恢复给…

工业平板定制方案_基于联发科、紫光展锐平台的工业平板电脑方案

工业平板主板采用联发科MT6762平台方案&#xff0c;搭载Android 11.0操作系统&#xff0c; 主频最高2.0GHz&#xff0c;效能有大幅提升;采用12nm先进工艺&#xff0c;具有低功耗高性能的特点。 该工业平板主板搭载了IMG GE8320图形处理器&#xff0c;最高主频为680MHz, 支持108…

Java设计模式之访问者模式详解

Java设计模式之访问者模式详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同踏上Java设计模式之旅&#xff0c;探索访问者模式&#x…