JAVA第七课

📅 发布时间:2026/9/7 8:15:24
JAVA第七课 跟日记本一起学JAVA相信你可以的加油~本课闯关内容1.照猫画虎0/62.基础知识(0/4...———————————————————————————————————————————基础知识1数组概念 可以通同时存储多个 相同类型的数据并且可以对其中的多个数据统一操作。使用数组的流程1声明指定数组的存储数据类型同时指定数组名(建议写法语法 数据类型[] 数组名; // int[] a;// int []a; int a[];2分配空间我起一个数组名是Ann, Ann[5]我给Ann了5个长度给了5个位置指定数组的 长度 数组名 new 数据类型[长度];3使用数组【基础重点】数组中存储的数组被称为数组元素。对数组的操作分为存元素 和 取元素对数组的存取元素通过数组名 和下标进行操作也叫元素的访问存元素在那个位置放东西数组名[下标] 值;取元素找那个位置的东西也就是元素就是调用时下标输入的数字代表的是在数组的哪一个位置就像数学的数列a1,a2...只不过数列的下标开头是1而数组的下标开头是0。由上面的Ann看你要调的时候写的就是Ann[0],Ann[1],Ann[2],Ann[3],Ann[4]这就是调元素取元素数组名[下标]屏幕上要显示写System.out.println(a[0]);直接取元素1.对数组的每一个空间进行编号这个编号被称为下标。数组的下标范围 0 ~ 数组长度-1其实就是把0当作开头数到数组长度2.如果操作数组时指定的数组下标不在 0~数组长度-1的范围内编译通过运行报错错误信息为java.lang.ArrayIndexOutOfBoundsException(数组的下标越界)用照猫画虎1举例子前提是int[] a;a new int[6];分配了6个空间将a[0]3;a[1]15;a[2]20;a[3]21;a[4]23;a[5]18;改为a[0]3;a[1]15;a[2]20;a[3]21;a[4]23;a[5]18;a[6]20;多了一个下标6总共分配了6个空间但现在超了一个空间在你cmd并javac -d . Test1.java这时不会报错但是你输入java demo.Test1才会出现java.lang.ArrayIndexOutOfBoundsException3.数组的遍历对数组中的元素进行一一访问的过程。语法 // 用循环的变量 控制 数组的下标for(int i0;i 数组的长度i){// 通过 a[i] 操作数组的每一个元素}获取数组的长度 数组名.length可以动态获取(还拿Ann举例子)i是一个数iAnn.length4.数组具有默认值值默认值情况如下整数 0小数0.0布尔false字符空字符 (\u0000)对象/引用null(以照猫画虎1为例前提是int[] a;a new int[6];分配了6个空间将a[0]3;a[1]15;a[2]20;a[3]21;a[4]23;a[5]18;改为a[0]3;a[1]15;a[2]20;a[3]21;a[4]23;(少了一个下标为5的输入java demo.Test1此时输出下标0对应的数据为3下标1对应的数据为15下标2对应的数据为20下标3对应的数据为21下标4对应的数据为23下标5对应的数据为0数组的长度6200平均值13.66666666666666615210)下标5对应的数据为0int整数的默认值为0照猫画虎1package demo; public class Test1{ public static void main(String[]args){ //存储 65名同学的年龄 int age 18; int age2 20; int age3 18; //..定义65个int类型的变量 //定义一个 数组存储5个学生年龄 //1.声明 int[] a;//声明确定数组的数据类型和数组名 //2.分配空间 a new int[6];//分配空间确定数组的长度 //3.使用 a[0]3; a[1]15; a[2]20; a[3]21; a[4]23; a[5]18; //System.out.println(a[0]); //System.out.println(a[1]); //System.out.println(a[2]); //System.out.println(a[3]); //System.out.println(a[4]); //前提是没有a[5]数组System.out.println(a[5]);java.lang.ArrayIndexOutOfBoundsException数组下标越界访问数组时超过数组下标的范围 //利用循环变量控制数组的下标 //数组的历遍将数组中的数据一一访问 for(int i0;ia.length;i){ System.out.println(下标i对应的数据为a[i]); } System.out.println(数组的长度a.length); //打印输出 数组中的偶数 for(int i0;ia.length;i){ if(a[i]%20){ System.out.println(a[i]); } } //计算数组中所有数据的平均数并打印输出 int sum 0; for(int i0;ia.length;i){ sum a[i]; } System.out.println(平均值(double)sum/a.length); //打印奇数下标得内容对应的元素(下标1.3.5--) for(int i0;ia.length;i){ if(i%2!0){ System.out.println(a[i]); } } //打印奇数下标改变i } }1.咱们的年龄是一年长一岁所以用循环结构进行数组的遍历。2.//打印输出 数组中的偶数for(int i0;ia.length;i){if(a[i]%20){System.out.println(a[i]);}}//计算数组中所有数据的平均数并打印输出//打印奇数下标得内容对应的元素(下标1.3.5--)for(int i0;ia.length;i){if(i%2!0){System.out.println(a[i]);}}一个是打印数组中的偶数为数组中的元素的偶数另一个是打印奇数下标。输出下标0对应的数据为3下标1对应的数据为15下标2对应的数据为20下标3对应的数据为21下标4对应的数据为23下标5对应的数据为18数组的长度62018平均值16.666666666666668152118基础知识21.数组的其他定义方式重点1声明的同时分配空间数据类型[] 数组名 new 数据类型[长度];2声明的同时显示初始化数据类型[] 数组名 new 数据类型[]{值1,值2,值3}; 注意[]中不能再指定数组的长度长度有{}中值个数决定。3显示初始化数据类型[] 数组名 {值1, 值2, 值3};注意声明和初始化必须一起完成同时数组的长度由{}中值个数决定。eg: int[] a ; a {1,7,4}; //error错误错误的这是先声明再初始化这是错误的必须同时int[] a {3,7,9,12,4};(正确的)2.数组的内存1数组在内存中空间是连续的你给分配空间写数字给长度也是连续的在电脑内存中。2数组名存储的是数组在 内存中的首地址。3计算机中的寻址方式首地址 下标 * 每一个存储空间的字节数。---(数组名[下标])4数组下标从 0开始是为了提高 寻址效率。5数组类型的变量相互赋值传递的是数组在内存中首地址。基本数据类型变量相互赋值传递的是数值在数组中传递的是数组中的元素假如说a数组有3个元素b数组有4个元素把b赋给a传递的是元素你第一时间是不是认为b的长度大于a的长度怎么赋值呢不直接赋值之后a数组与b数组中的元素一摸一样了。同类型的数组类型是可以直接相互赋值的在这种数组的代码一但出错有可能显示出一大堆错先看第一行先改第一行说不定下面的错误就都没了照猫画虎2package demo; public class Test2{ public static void main(String[]args){ //第二种定义方式声明的同时并分配空间 double [] ds new double[4]; ds[0] 9.8; ds[1] 9.0; ds[2] 7.8; ds[3] 17.8; for(int i 0;ids.length;i){ System.out.println(ds[i]); } //第三种定义方式声明的同时并初始化显示的初始化 String[] strs new String[]{aa,bb,cc}; for(int i0;istrs.length;i){ System.out.println(strs[i]); } //第四种定义方式显示初始化 int[] a {3,7,9,12,4}; for(int i0;ia.length;i){ System.out.println(a[i]); } int[] bs new int[3]; for(int i0;ibs.length;i){ System.out.println(bs[i]); } } }int[] bs new int[3];for(int i0;ibs.length;i){System.out.println(bs[i]);}仅声明不初始化就用到下面的知识了。输出9.89.07.817.8aabbcc379124000基础知识3数组的扩容扩容思想1先申请一个更大空间的新数组通常新数组长度为原数组长度的2倍2将原数组中的元素进行一一复制到新数组中3新地址 覆盖 旧地址数组扩容实现的方式1第一种方式int[] a new int[]{1,7,4,3};// 1. 申请新数组 长度为原有数组的2倍int[] b new int[a.length*2];// 2. 将原有数组中内容进行一一拷贝到新数组中for(int i0;ia.length;i){ b[i] a[i]; }// 3. 新的地址覆盖旧的地址 a b;2第二种方式利用 System.arraycopy(a,0,b,0,a.length); // 完成 数组复制是你填System.arraycopy(a,0,b,0,a.length);括号里的 参数说明第一个参数原数组名第二个参数原数组拷贝的起始下标第三个参数新数组名 第四个参数新数组的存储起始下标 第五个参数拷贝的个数/长度3第三种方式利用 java.util.Arrays.copyOf(原数组名,新数组的长度) // 完成新数组的定义数组的复制还是填java.util.Arrays.copyOf(原数组名,新数组的长度) 括号里的参数说明第一个参数扩容的数组名就是你想扩容的数组名也就是原数组名第二个参数指定新数组的长度照猫画虎3package demo; public class Test1{ public static void main(String[]args){ int[]a{1,8,4,6}; //扩容 //1.定义一个更大长度的新数组 int []bnew int[a.length*2]; //2.将原来数组中的数据赋值到新的数组中 for(int i0;ia.length;i){ b[i]a[i]; } //3.新的地址覆盖旧的地址 ab; for(int i0;ia.length;i){ System.out.println(a[i]); } //第二种扩容方式借助工具类 ajava.util.Arrays.copyOf(a,a.length*2); System.out.println(第二次扩容之后的数据:); for(int i0;ia.length;i){ System.out.println(a[i]); } } }输出18460000第二次扩容之后的数据int []bnew int[a.length*2];这不就是乘以2倍了嘛原来是8个长度现在是16个长度但是我们只给前4个元素了所以不管是扩容前还是扩容后之后的位置都输出的默认值:1846000000000000基础知识4数组的排序1.冒泡排序法将相邻的两个元素进行一一比较元素大逐步往后移。 (从小到大排序) 照猫画虎4就是用的这个方法2.选择排序固定一个下标对应的元素和其他元素进行一一比较较小数据逐步往前移。(从小到大排序)3.利用 java.util.Arrays.sort(数组名); 进行排序 ---快速排序照猫画虎4package demo; public class Test2{ public static void main(String[]args){ int[]a{9,4,5,2}; //将数组中数据进行从小到大排序 /*冒泡排序相邻的两个元素进行一一比较 /* 两个比较项j控制比较第一个下标ji第二个比较项 每次都是a[j]和a[j1]进行比较 */ //外层循环控制重复轮数 for(int i0;ia.length;i){ for(int j0;ja.length-i;j){ //判断a[j]和a[j1]的大小 if(a[j]a[j1]){ //需要两个变量之间进行交换 int temp a[j];//借助第三个变量实现两个变量交换 a[j]a[j1]; a[j1]temp; } } } //第一轮i1 /*for(int j0;j3;j)*/ java.util.Arrays.sort(a); for(int i0;ia.length;i){ System.out.println(a[i]); } } }输出2459基础知识5二维数组语法1声明数据类型 [] [] 数组名;2分配空间数组名 new 数据类型[行数] [列数]; // 行 又称为高维 列低维二维数组的使用1通过行和列对二位数组进行访问语法前面的[]为行标后面的[]为列标前后不能变数组名[行标] [列标]注意行标和列表都是从 0 开始例如 a[0] [3] // 第0行第3列的元素2二维数组也具有默认值同一维数组3获取二维数组的行数 数组名.length列数数组名[行标].length 注意二维数组是一维数组的一维数组。3.二维数组的其他定义方式(1)声明的同时并分配空间数据类型[][] [] [] 数组名 new 数据类型[行数] [列数];(2) 显示初始化数据类型[] [] 数组名 new 数据类型[] []{{值1,值2},{值3,值4},{值5,值6}}; 注意后面 {} 中 {}的个数决定行数所以[] []中个不能再制定行数和列数。(3) 显示初始化数据类型[] [] 数组名 {{值1,值2},{值3,值4}}; 注意声明和初始化必须一起完成。4.不规则的二维数组(1)概念每一行的列数不相同(2) 不规则的二维数组的定义方式a.(行数确定了列数一个个定义)数据类型[] [] 数组名 new 数据类型[行数] []数组名[0] new 数据类型[长度];数组名[1] new 数据类型[长度];....注意二维数组定义可以只指定行数/高维但是不能只指定列数/低维​​​​​​​b.数据类型[] [] 数组名 {{值1},{值1,值2,值3},{值1,值2}};基础知识6这个其实我也不太了解可变长参数函数可以接受个数不固定的实参jdk5.0 提出的概念。注意参数的个数由调用者调用数给定 个数确定可变长参数可以接受不等数量的相同类型的数据。语法 public static 返回值类型 函数名(数据类型... 变量名){}使用可变长参数会自动生成对应类型数组所以在函数中直接将 可变长参数当做数组应用即可。5.语法规定一个函数中最多只能定义一个可变长参数并且可变长参数必须定义在形参最后 一个位置。6.可变长参数可以提高代码的灵活度。跟我一步步学慢慢走。未完待续。。。