重学Java 7 数组Arr.1

news/2024/2/25 13:56:34/文章来源:https://blog.csdn.net/m0_73983707/article/details/135614974

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

                        ——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.luyixian.cn/news_show_925783.aspx

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

相关文章

ACL【新华三与华为的区别】

【解释】acl简单点解释就是&#xff0c;一套根据需求而设置的规则 【背景】 192.168.1.0/24 网段不允许访问 192.168.2.0/24 网段&#xff0c;要求使用基本 ACL 实现20_1 可以访问 20_6 的 TELNET 服务&#xff0c;但不能访问 FTP 服务 【操作步骤】 {易混点 }&#xff1a;1. …

06--视图、索引、事务、权限

1、视图(view) 1.1 什么是视图 视图是一种根据查询&#xff08;也就是SELECT表达式&#xff09;定义的数据库对象&#xff0c;用于获取想要看到和使用的局部数据 视图有时也被成为“虚拟表”。 视图可以被用来从常规表&#xff08;称为“基表”&#xff09;或其他视图中查询…

k8s 存储卷和pvc,pv

存储卷---数据卷 容器内的目录和宿主机的目录进行挂载。 容器在系统上的生命周期是短暂的&#xff0c;deletek8s用控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会回复到初始状态。 一旦回到初始状态&#xff0c;所有的后天编辑的文件的都会消失。 …

PySide6/PyQt6如何设置全局热键,全局热键!

文章目录 📖 介绍 📖🏡 环境 🏡📒 实现方法 📒⚓️ 相关链接 ⚓️📖 介绍 📖 我们在使用PySide6/PyQt6设置热键的时候一般都是使用QShortcut,、QKeySequence两个类来实现,但是这样写的快键键并不是全局快捷键,需要用户激活软件窗口才能实现快捷键对应的功能,…

【面试合集】说说微信小程序的发布流程?

面试官&#xff1a;说说微信小程序的发布流程&#xff1f; 一、背景 在中大型的公司里&#xff0c;人员的分工非常仔细&#xff0c;一般会有不同岗位角色的员工同时参与同一个小程序项目。为此&#xff0c;小程序平台设计了不同的权限管理使得项目管理者可以更加高效管理整个团…

数据结构【树+二叉树】

目录 线性表和非线性表 树的概念 树的存储表示 二叉树的概念 特殊二叉树 满二叉树 完全二叉树 二叉树的性质 二叉树的存储结构 顺序存储 链式存储 本篇我们开始进入数据结构中【树】的学习。 线性表和非线性表 逻辑结构&#xff1a;人想象出来的物理结构&#xf…

css 怎么绘制一个带圆角的渐变色的边框

1&#xff0c;可以写两个样式最外面的div设置一个渐变的背景色。里面的元素使用纯色。但是宽高要比外面元素的小。可以利用里面的元素设置padding这样挡住部分渐变色。漏出来的渐变色就像边框一样。 <div class"cover-wrapper"> <div class"item-cover…

MongoDB-数据库文档操作(2)

任务描述 文档数据在 MongoDB 中的查询和删除。 相关知识 本文将教你掌握&#xff1a; 查询文档命令&#xff1b;删除文档命令。 查询文档 我们先插入文档到集合 stu1 &#xff1a; document([{ name:张小华, sex:男, age:20, phone:12356986594, hobbies:[打篮球,踢足球…

【软件测试】学习笔记-测试基础架构

这篇文章探讨什么是测试基础架构。 什么是测试基础架构&#xff1f; 测试基础架构指的是&#xff0c;执行测试的过程中用到的所有基础硬件设施以及相关的软件设施。因此&#xff0c;我们也把测试基础架构称之为广义的测试执行环境。通常来讲&#xff0c;测试基础 架构主要包括…

【PostgreSQL内核学习(二十三)—— 执行器(ExecEndPlan)】

执行器&#xff08;ExecEndPlan&#xff09; 概述ExecEndPlan 函数ExecEndNode 函数 总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用…

压力测试+接口测试(工具jmeter)

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因 为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单&#xff0c;但必须记住一点&#xff1a;opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0&#xff0c;opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后&#xff0c;默认看到的是git分支&…

DC电源模块与AC电源模块的对比分析

DC电源模块与AC电源模块的对比分析 BOSHIDA DC电源模块和AC电源模块是两种常见的电源模块&#xff0c;它们在供电方式、稳定性、适用范围等方面有所不同&#xff0c;下面是它们的对比分析&#xff1a; 1. 供电方式&#xff1a; DC电源模块通过直流电源供电&#xff0c;通常使用…

shiro实战

接下来我将用编码的方式&#xff0c;来演示如何使用shirojwt实现认证并下发token&#xff0c;但是没有整合到springboot中。只是shiro的API的调用 1. shirojwt 实现登录认证、获取资源的流程图 2.编码实现 &#xff08;1&#xff09;工程结构 &#xff08;2&#xff09;核心代…

msvcr110.dll缺失怎么解决,修复msvcr110.dll缺失的方法分享

首先&#xff0c;我们来了解一下msvcr110.dll是什么文件。msvcr110.dll是Microsoft Visual C 2012 Redistributable的一个组件&#xff0c;它包含了许多运行库函数&#xff0c;这些函数在编译和运行使用Visual C编写的程序时是必不可少的。简单来说&#xff0c;msvcr110.dll就是…

Unity解决Udp客户端无法接收数据的问题

Unity解决Udp客户端无法接收数据的问题 在我之前做过的项目中&#xff0c;其中不少涉及Udp客户端的项目。在这些项目中&#xff0c;一般只需要实现客户端向服务器端发送数据的功能就可以了&#xff0c;一般都不用接收服务器端发送的数据&#xff0c;但是也有同学使用了我分享的…

[C#]winform部署官方yolov8-obb旋转框检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-obb&#xff08;You Only Look Once version 8 with Oriented Bounding Boxes&#xff09;是一种先进的对象检测算法&#xff0c;它在传统的Yolov3和Yolov4基础上进行了优化&#xff0c;加…

Next.js 开发指​南(GitHub 115k star​)

Next.js 是一个构建于 Node.js 之上的开源 Web 开发框架&#xff0c;它扩展了最新的 React 特性&#xff0c;集成了基于 Rust 的 JavaScript 工具&#xff0c;可以帮助你快速创建全栈 Web 应用 &#xff08;full-stack Web applications&#xff09; 。 对于有一定 React 基础…

软件测试|使用selenium进行多窗口操作

简介 在我们进行自动化测试的工作中&#xff0c;经常会点击某个元素或者链接就会自动打开一个新页面&#xff0c;需要我们转到新打开的页面去进行操作&#xff0c;这个时候我们就需要能够自动切换到新页面进行后续的操作&#xff0c;selenium同样支持这个功能&#xff0c;本文…

FineBI报表页面大屏小屏自适应显示问题

大屏正常显示 显示正常 小屏BI自适应显示 存在遮挡字体情况 小屏浏览器缩放显示 等比缩放后显示正常