Java数组入门:从定义到遍历全解析

发布时间:2026/10/10 16:38:08
Java数组入门:从定义到遍历全解析
Java学习记录日期10.8~9今日知识点 ——什么是数组数组是一种容器可以用来存储同种数据类型的多个值变量能干的数组能干变量不能干的数组能干存储多个行业特许这就是数组重新认识数组内存练习代码今日知识点 ——数组的静态初始化定义数组、存储数据初始化是指在定义变量、数组、对象的时候进行赋值定义赋值 同时执行//初始化变量numintnum10;静态初始化创建数组的时候直接给数组赋值完整格式数据类型 数组名[] new 数据类型[]{数据值数据值…};int arr[] new int []{1,2,3};[]是数组的标记千万不能省略简写格式数据类型 数组名[] {数据值数据值…};int arr[] {1,2,3};数组特点1连续的空间数组特点2一旦定义长度不可变练习代码packageArrayDemo;publicclassArrayDemo1{publicstaticvoidmain(String[]args){/* 数组的静态初始化 1、定义数组存储3位同学的年龄 2、定义数组存储5位同学的身高 3、定义数组存储3位同学的姓名 完整格式数据类型 数组名[] new 数据类型[]{数据值数据值...}; int arr[] new int []{1,2,3}; 简写格式数据类型 数组名[] {数据值数据值...}; int arr[] {1,2,3}; */intageArr1[]{18,19,20};doubleheightArr2[]{178.0,179.0,179.8};StringnameArr3[]{张三,叶汶,王五};}}今日知识点 ——数组的元素访问获取、修改数组里面的数据索引索引是数组的一个编号也叫做角标、下标、编号索引特点从0开始的连续1不间断获取数组元素变量 数组名[索引] int num arr[5];修改数组元素数组名[索引] 数据值 arr[5] 10;练习代码packageArrayDemo;publicclassArrayDemo2{publicstaticvoidmain(String[]args){/* 数组中元素的访问 1、获取数据 2、修改数据 *///1、静态初始化创建数组intarr[]{1,2,3,4,5};//0 1 2 3 4//2、获取数组中元素的值intnumarr[0];System.out.println(num);//1System.out.println(arr[2]);//3//3、修改数组中元素的值//注意一旦修改完毕原来的数据就会被覆盖arr[1]10;System.out.println(arr[1]);//10}}今日知识点 ——数组的遍历获取数组里面的所有元素练习代码packageArrayDemo;publicclassArrayDemo3{publicstaticvoidmain(String[]args){/* 数组的遍历定义一个整数数组里面存储任意数据并将数组遍历并打印 *///1、利用静态初始化创建数组/*int arr[] {1,2,3,4,5}; //2、循环遍历数组 //arr.length数组的长度数组中最后一个元素的索引加1 //for(int i 0; i arr.length; i) for(int i 0; i arr.length - 1; i) System.out.println(arr[i]); *///遍历数组的快速生成方式//数组名.fori然后回车intarr[]{1,2,3,4,5};for(inti0;iarr.length;i){System.out.println(arr[i]);}}}今日知识点 ——数组的动态初始化创建数组的时候先给一些默认值等知道要存什么数据了再修改。动态在定义变量、数组、对象的时候数据是不确定的初始化创建数组的时候直接给数组赋值定义赋值同时执行动态初始化创建数组的时候指定长度由系统为数组分配初始值完整格式数据类型 数组名[] new 数据类型[长度];int arr [] new int [3];练习代码packageArrayDemo;importjava.util.Scanner;publicclassArrayDemo4{publicstaticvoidmain(String[]args){/* 数组动态初始化 需求 键盘录入5个整数存入数组当中并进行遍历 动态初始化的格式数据类型 数组名[] new 数据类型[数组长度]; 先一个循环一个判断只做一件事 *///1、创建数组intarr[]newint[5];//2、键盘录入数据ScannerscnewScanner(System.in);for(inti0;iarr.length;i){System.out.println(请输入一个整数);arr[i]sc.nextInt();}//3、遍历数组for(inti0;iarr.length;i){System.out.println(arr[i]);}}}今日知识点 ——数组的常见问题、算法真题最大的问题数组的索引越界0~arr.length-1练习代码练习代码1packageArrayDemo;importjava.util.Scanner;publicclassTest1{publicstaticvoidmain(String[]args){/* 练习查找数据 需求 已知数组元素为 {33,5,22,44,55,33} 键盘录入任意一个数据查找这个数据在数组中是否存在 如果数组中要查找的数据出现多次只要显示第一次的索引即可 输出要求 如果存在打印索引 如果不存在提示“该数据不存在” 细节一什么情况下我才能断定数据在数组中不存在 只有当for循环执行完毕还没有找到num我才能断定数据在数组中不存在 细节二两种写法flag标记 count次数 *///1、定义数组int[]arr{33,5,22,44,55,33};//2、键盘录入数据ScannerscnewScanner(System.in);System.out.println(请输入一个数据);intnumsc.nextInt();//作用记录数组当中是否存在num//boolean flag false;//作用记录数组当中num出现的次数intcount0;//3、拿着num跟数组的每一个元素挨个比较for(inti0;iarr.length;i){//i是索引arr[i]才是元素/数据if(numarr[i]){//flag true;count;System.out.println(i);break;//一旦找到就结束for循环}}//4、判断flag的值/*if(!flag){//if里为真时才会执行即flag为false时执行 System.out.println(该数据不存在); } */if(count0){System.out.println(该数据不存在);}}}练习代码2packageArrayDemo;publicclassTest2{publicstaticvoidmain(String[]args){/* 求最大值已知数组元素为 {33,5,22,44,55} 核心一最初是第一个人先接受挑战 核心二两两比较大的晋级下一轮 细节一循环的开始条件如果为0请问对结果有什么影响没有影响就是循环多进行一次 细节二max的初始化值能不能赋值为0不能万一数组里的元素都是负数那么0就是最大值了 max的初始值不能赋为0max记录的值一定是数组里的元素 *///1、创建数组intarr[]{33,5,22,44,55};//2、定义一个变量擂台默认记录第一个值intmaxarr[0];//3、让后面的人依次跟擂台的人比较一下for(inti1;iarr.length;i){//4、比较如果后面的人比擂台的人大就让后面的人上台if(arr[i]max){maxarr[i];}}System.out.println(最大值是max);}}练习代码3packageArrayDemo;publicclassTest4{publicstaticvoidmain(String[]args){/* 前置练习 交换两个变量中的数据 */inta10;intb20;/*a b;//a20,b20 b a;//a20,b20 *///定义一个临时变量用于记录a的值inttempa;//变量b中记录得知赋给变量aab;//变量a中记录得知赋给变量bbtemp;System.out.println(a);System.out.println(b);}}packageArrayDemo;importjava.util.Random;publicclassTest3{publicstaticvoidmain(String[]args){/* 需求已知数组元素为{1,2,3,4,5,6,7,8,10} 要求打乱数组中的元素 思路第一步0索引上的数据跟随机位置上的数据进行交换 第二步重复第一步 细节一如何交换两个位置上的数据假如交换a和b利用第三变量temp存储a的值然后b的值赋给变量aab最后temp的值即a的值赋给b 细节二如何获取一个随机的索引 Random r new Random();//这里括号不写东西要是Scanner就要写System.in int randomIndex r.nextInt(arr.length);//范围 *///1、定义数组intarr[]{1,2,3,4,5,6,7,8,9,10};RandomrnewRandom();//2、遍历数组for(inti0;iarr.length;i){//i是索引arr[i]是元素//第一次循环i 0//获取一个随机的索引intrandomIndexr.nextInt(arr.length);//0~9//拿着索引i上的元素跟随机索引上的数据进行交换inttemparr[i];arr[i]arr[randomIndex];arr[randomIndex]temp;}//3、遍历数组,输出结果for(inti0;iarr.length;i){System.out.println(arr[i]);}}}练习代码4packageArrayDemo;importjava.util.Random;publicclassTest5{publicstaticvoidmain(String[]args){/* 需求获取10个 1~100之间的随机数并存入到数组当中要求保证数据是唯一的 核心思路如果存在就不存就继续生成下一个随机数 如果不存在就存入到数组当中 1、创建数组 2、生成随机数 3、判断数组中是否存在该随机数 4、如果存在就继续生成下一个随机数 5、如果不存在就存入到数组当中 问题1为什么整个结果当中会有0因为如果生成的随机数已经存在了不存入数组但会默认为0. *///1、创建数组intarr[]newint[10];//2、生成随机数RandomrnewRandom();//3、判断数组中是否存在该随机数//i作用是随机数应存入的位置for(inti0;iarr.length;i){intnumr.nextInt(1,101);//对num进行判断不存在——存入存在——不存intcount0;//j是遍历数组的索引for(intj0;jarr.length;j){if(numarr[j]){//存在count;//跳出循环break;}}//对count进行判断if(count0){arr[i]num;//只有生成一个满足的要求的随机数索引才会自增i;//***}}//遍历数组for(inti0;iarr.length;i){System.out.println(arr[i] );}System.out.println();}}练习代码5packageArrayDemo;importjava.util.Random;publicclassTest6{publicstaticvoidmain(String[]args){/* 需求获取10个 0~100之间的随机数并存入到数组当中要求保证数据是唯一的 核心思路如果存在就不存就继续生成下一个随机数 如果不存在就存入到数组当中 1、创建数组 2、生成随机数 3、判断数组中是否存在该随机数 4、如果存在就继续生成下一个随机数 5、如果不存在就存入到数组当中 问题1为什么整个结果当中会有0因为如果生成的随机数已经存在了不存入数组但会默认为0. *///1、创建数组intarr[]newint[10];// 此时 arr 的每个元素都是 0// arr [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]// 2、生成随机数RandomrnewRandom();//size记录已存入的有效数据个数intsize0;// 3、循环生成随机数直到存满10个while(sizearr.length){intnumr.nextInt(101);//0~100//4、判断已存入的数据中是否存在该随机数Booleanflagfalse;for(intj0;jsize;j){if(numarr[j]){flagtrue;break;}}//5、不存在就存入if(!flag){arr[size]num;size;}// 存在的话什么都不做继续循环重新生成随机数}//遍历数组for(inti0;iarr.length;i){System.out.println(arr[i]);}System.out.println();}}练习代码6packageArrayDemo;publicclassTest7{publicstaticvoidmain(String[]args){/* 练习去除重复元素给定义一个递增有序数组去除重复元素 慢指针存入的位置 快指针找不重复的数据 相等舍弃快指针的数据、快指针后移 不相等快指针的数据存入慢指针的位置、慢指针后移、快指针后移 *///1、定义一个递增有序数组intarr[]{1,1,2,2,2,2,3,3,3,3};//2、定义两个指针intslow0;intfast1;//3、利用循环不断移动快慢指针找不重复的元素while(fastarr.length){//循环结束条件//4、判断快慢指针的元素是否相等/* if(arr[slow] arr[fast]){ fast;//相等舍弃快指针的数据、快指针后移 }else{//不相等快指针的数据存入慢指针的位置、慢指针后移、快指针后移 slow;//慢指针要先后移才可以将快指针的数据赋值给慢指针 arr[slow] arr[fast]; fast; }*/if(arr[slow]!arr[fast]){slow;//慢指针要先后移才可以将快指针的数据赋值给慢指针arr[slow]arr[fast];}fast;}//5、输出结果for(inti0;islow;i){System.out.print(arr[i] );}System.out.println();}}练习代码7packageArrayDemo;publicclassTest8{publicstaticvoidmain(String[]args){/* 练习两数之和 给定一个整数数组 nums 和一个目标值 target请你在该数组中找出和为目标值的那 两个 整数并返回他们的数组下标。 要求1只要求输出一个结果即可不要求输出所有可能的结果。 要求2要求输出所有可能的结果。 *///要求1只要求输出一个结果即可不要求输出所有可能的结果。intarr[]{2,7,11,18,6};inttarget13;booleanflagfalse;//标记是否找到for(inti0;iarr.length;i){for(intji1;jarr.length;j){if(arr[i]arr[j]target){System.out.println(i j);flagtrue;break;//找到后就退出内循环}}if(flag){break;//找到后就退出外循环}}//如果找不到就输出没有找到if(!flag){System.out.println(没有找到);}}}练习代码8packageArrayDemo;publicclassTest9{publicstaticvoidmain(String[]args){/* 练习两数之和 给定一个整数数组 nums 和一个目标值 target请你在该数组中找出和为目标值的那 两个 整数并返回他们的数组下标。 要求1只要求输出一个结果即可不要求输出所有可能的结果。 要求2要求输出所有可能的结果。 *///要求2要求输出所有可能的结果。intarr[]{2,7,11,18,6};inttarget13;booleanflagfalse;//标记是否找到for(inti0;iarr.length;i){for(intji1;jarr.length;j){if(arr[i]arr[j]target){System.out.println(i j);flagtrue;}}}//如果找不到就输出没有找到if(!flag){System.out.println(没有找到);}}}练习代码8packageArrayDemo;publicclassTest11{publicstaticvoidmain(String[]args){/* 作业3查找元素力扣算法 题目描述 给定一个递增的有序数组和一个目标值在数组中找到目标值打印其索引。 如果目标值不存在于数组中打印应插入的位置。 举例1 数据nums [1,3,5,6]; target 5 输出2 举例2 数据nums [1,3,5,6], target 2 输出1 举例3 数据nums [1,3,5,6], target 7 输出4 */intnums[]{1,3,5,6};// 有序数组inttarget2;booleanflagfalse;// 标志位用于判断目标值是否存在于数组中for(inti0;inums.length;i){// 只要当前元素大于或等于目标值插入位置就是当前索引 iif(nums[i]target){System.out.println(i);flagtrue;break;// 找到目标值后退出循环}}// 如果循环结束都没有找到说明数组里所有数都比 target 小if(!flag){System.out.println(nums.length);//输出4}}}