重学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 拿着刷子通过以下的过…

一、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;因此&…

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

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

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

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

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

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

连接超时的问题

连接超时的问题 通用第三方工具连接超时 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…

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

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

Flume 之自定义Sink

1、简介 前文我们介绍了 Flume 如何自定义 Source&#xff0c; 并进行案例演示&#xff0c;本文将接着前文&#xff0c;自定义Sink&#xff0c;在这篇文章中&#xff0c;将使用自定义 Source 和 自定义的 Sink 实现数据传输&#xff0c;让大家快速掌握Flume这门技术。 2、自定…

Python - 深夜数据结构与算法之 Sort

目录 一.引言 二.排序简介 1.排序类型 2.时间复杂度 3.初级排序 4.高级排序 A.快速排序 B.归并排序 C.堆排序 5.特殊排序 三.经典算法实战 1.Quick-Sort 2.Merge-Sort 3.Heap-Sort 4.Relative-Sort-Array [1122] 5.Valid-anagram [242] 6.Merge-Intervals […

Java NIO (二)NIO Buffer类的重要方法(备份)

1 allocate()方法 在使用Buffer实例前&#xff0c;我们需要先获取Buffer子类的实例对象&#xff0c;并且分配内存空间。需要获取一个Buffer实例对象时&#xff0c;并不是使用子类的构造器来创建&#xff0c;而是调用子类的allocate()方法。 public class AllocateTest {static…

如何快速看懂一篇英文AI论文?

已经2024年了&#xff0c;该出现一个写论文解读AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴&#xff0c;一定深有体验——费劲。其他agents也没有能搞定的&#xff0c;今天我发现了一个超级厉害的写论文解读的agent &#xff0c…

某银行主机安全运营体系建设实践

随着商业银行业务的发展&#xff0c;主机规模持续增长&#xff0c;给安全团队运营工作带来极大挑战&#xff0c;传统的运营手段已经无法适应业务规模的快速发展&#xff0c;主要体现在主机资产数量多、类型复杂&#xff0c;安全团队难以对全量资产进行及时有效的梳理、管理&…

HCIA—— 16每日一讲:HTTP和HTTPS、无状态和cookie、持久连接和管线化、(初稿丢了,这是新稿,请宽恕我)

学习目标&#xff1a; HTTP和HTTPS、无状态和cookie、持久连接和管线化、HTTP的报文、URI和URL&#xff08;初稿丢了&#xff0c;这是新稿&#xff0c;请宽恕我&#x1f636;‍&#x1f32b;️&#xff09; 学习内容&#xff1a; HTTP无状态和cookieHTTPS持久连接和管线化 目…

vue2 pdfjs-2.8.335-dist pdf文件在线预览功能

1、首先先将 pdfjs-2.8.335-dist 文件夹从网上搜索下载&#xff0c;复制到public文件夹下. 2、在components下新建组件PdfViewer.vue文件 3、在el-upload 中调用 pdf-viewer 组件 4、在el-upload 中的 on-preview方法中加上对应的src路径 internalPreview(file) { //判断需要…

编译原理1.3习题 程序设计语言的发展历程

图源&#xff1a;文心一言 编译原理习题整理~&#x1f95d;&#x1f95d; 作为初学者的我&#xff0c;这些习题主要用于自我巩固。由于是自学&#xff0c;答案难免有误&#xff0c;非常欢迎各位小伙伴指正与讨论&#xff01;&#x1f44f;&#x1f4a1; 第1版&#xff1a;自…

IPv6隧道--GRE隧道

GRE隧道 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。 GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一…