文章目录
- 前言
- 一、数组介绍
- 二、数组的定义域静态初始化
- 三、数组元素访问
- 数组地址中的小拓展:
- 四、数组遍历
- 1.获取数组里面的元素
- 2.把数据存储到数组中
- 3.遍历数组的最快方式
- 4.遍历数组并求和
- 5.统计个数
- 6.变化数据
- 五、数组动态初始化
- 1.数组默认初始化值的规律
- 2.数组动态初始化和静态初始化的区别
- 六、数组内存图
- 1.Java内存分配
- 2.数组的内存图
- 3.总结:
- 4.两个数组指向同一个空间的内存
- 总结:
- 七、数组常见问题
- 小结:
- 八、数组常见操作
- 1.求最值
- 2.遍历数组求和
- 3.交换数组中的数据
- 方法一:
- 方法二:
- 4.打乱数组中的数据
- 总结
前言
一、数组介绍
二、数组的定义域静态初始化
public class test8 {public static void main(String[] args) {//格式//静态初始化//完整格式//数据类型 [] 数组名=new 数据类型[]{元素1,元素2...};//简化格式//数据类型 [] 数组名={元素1,元素2...};//需求1:定义数组存储5个学生的年龄int[] arr1=new int[]{11,12,13,14};int[] arr2={11,12,13,14};//需求2:定义数组存储3个学生的姓名String[] arr3=new String[]{"zhangsan","lisi","wangwu"};String[] arr4={"zhangsan","lisi","wangwu"};//需求3:定义数组存储4个学生的身高double[] arr5=new double[]{1.93,1.65,1.68,1.71};double[] arr6={1.93,1.65,1.68,1.71};}
}
三、数组元素访问
数组地址中的小拓展:
解释一下地址值的格式含义
[: 表示当前是一个数组
D: 表示当前数组里面的元素都是double类型的
I: 表示当前数组里面的元素都是int类型的
@: 表示一个间隔符号(固定格式)
776ec8df才是数组真正的地址值(十六进制)
平时我们习惯吧这个整体叫做数组的地址值
public class test8 {public static void main(String[] args) {//格式//静态初始化//完整格式//数据类型 [] 数组名=new 数据类型[]{元素1,元素2...};//简化格式//数据类型 [] 数组名={元素1,元素2...};//需求1:定义数组存储5个学生的年龄int[] arr1=new int[]{11,12,13,14};System.out.println(arr1);
// int[] arr2={11,12,13,14};
//
// //需求2:定义数组存储3个学生的姓名
// String[] arr3=new String[]{"zhangsan","lisi","wangwu"};
// String[] arr4={"zhangsan","lisi","wangwu"};
//
// //需求3:定义数组存储4个学生的身高
// double[] arr5=new double[]{1.93,1.65,1.68,1.71};
// double[] arr6={1.93,1.65,1.68,1.71};/*扩展:解释一下地址值的格式含义[: 表示当前是一个数组D: 表示当前数组里面的元素都是double类型的I: 表示当前数组里面的元素都是int类型的@: 表示一个间隔符号(固定格式)776ec8df才是数组真正的地址值(十六进制)平时我们习惯吧这个整体叫做数组的地址值*/}
}
四、数组遍历
1.获取数组里面的元素
2.把数据存储到数组中
public class test9 {public static void main(String[] args) {/*利用索引对数组中的元素进行访问1.获取数组里面的元素格式: 数组名[索引]*/int[] arr={1,2,3,4};/*获取数组里面的第一个元素其实就是0所以上对应的元素int number=arr[0];System.out.println(number);//1获取数组中1索引上对应的数据,并直接打印出来System.out.println(arr[1]);//2*///2.把数据存储到数组中//格式: 数组名[索引]=具体数据/变量;//细节:一旦覆盖之后,原来的数据就不存在了arr[0]=100;System.out.println(arr[0]);}
}
3.遍历数组的最快方式
public class test10 {public static void main(String[] args) {//1.定义数组int arr[]={1,2,3,4,5};//2.获取数组里面所有的元素//格式: 数组名[索引]/*System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println(arr[3]);System.out.println(arr[4]);*///利用循环改进代码//开始条件:0//结束条件:数组的长度-1(最大索引)//但是当原始数组里面的元素过多,数量不便于数出时,5的位置处该写什么呢?/*for (int i = 0; i < 5; i++) {//i:0,1,2,3,4System.out.println(arr[i]);}*///在Java当中,关于数组的一个长度属性,length//调用方式: 数组名.lengthfor (int i = 0; i < arr.length; i++) {//i:0,1,2,3,4System.out.println(arr[i]);}//扩展://自动的快速生成数组的遍历方式//idea提供的//数组名.forifor (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}}
4.遍历数组并求和
public class test11 {public static void main(String[] args) {/*定义一个数组,存储1,2,3,4,5遍历数组得到每一个元素,求数组里面所有的数据和*///分析//1.定义一个数组并添加数据int[] arr={1,2,3,4,5};//求和变量int sum=0;//2.遍历数组得到一个数据,累加求和for (int i = 0; i < arr.length; i++) {//i 依次表示数组里面的每一个索引//arr[i] 依次表示数组里面的每一个元素sum=sum+arr[i];}//当循环结束之后,sum的值就是累加之后的结果System.out.println(sum);}
}
5.统计个数
import javax.imageio.metadata.IIOMetadataFormatImpl;public class test12 {/*定义一个数组存储1,2,3,4,5,6,7,8,9,10遍历数组的到每一个元素,通技术组里面一共有多少能被3整除的数字*/public static void main(String[] args) {//分析://1.定义一个数组,存储1,2,3,4,5,6,7,8,9,10int[] arr={1,2,3,4,5,6,7,8,9,10};//定义一个变量,用来统计次数int count=0;//2.遍历数组得到每一个元素for (int i = 0; i < arr.length; i++) {//i 表示数组里面的每一个索引//arr[i] 表示数组里面的每一个元素//3.判断当前元素是否为3的倍数,如果是的话,统计变量自增一次if (arr[i] % 3 == 0) {count++;}}System.out.println("数组中能被3整除的数字有"+count+"个");}}
6.变化数据
public class test13 {public static void main(String[] args) {/*定义一个数组存储1,2,3,4,5,6,7,8,9,10遍历得到每一个元素要求:如果是奇数,将当前数字扩大两倍如果是偶数,将当前数字变为原来的1/2*///分析//1.定义一个数组存储数据int[] arr={1,2,3,4,5,6,7,8,9,10};//2.遍历数组得到每一个元素for (int i = 0; i < arr.length; i++) {if(arr[i]%2==0){arr[i]=arr[i]/2;}else {arr[i]=arr[i]*2;}}//遍历数组for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}
五、数组动态初始化
1.数组默认初始化值的规律
整数类型:默认初始化值0小数类型:默认初始化值0.0字符类型:默认初始化值'\u0000' 空格布尔类型:默认初始化值 false引用数据类型:默认初始化值 null
public class test14 {public static void main(String[] args) {/*定义一个数组,用来存班级中50个学生的姓名姓名未知,等学生报名之后,再进行添加*///格式://数据类型[] 数组名=new 数组类型[数组的长度]//在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值String[] arr=new String[50];//添加学生arr[0]="zhangsan";arr[1]="lisi";//获取System.out.println(arr[0]);//zhangsanSystem.out.println(arr[1]);//lisiSystem.out.println(arr[2]);//打印出来的是默认初始化值null//数组默认初始化值的规律//整数类型:默认初始化值0//小数类型:默认初始化值0.0//字符类型:默认初始化值'\u0000' 空格//布尔类型:默认初始化值 false//引用数据类型:默认初始化值 nullint[] arr2=new int[3];System.out.println(arr2[0]);//0System.out.println(arr2[1]);//0System.out.println(arr2[2]);//0}
}
2.数组动态初始化和静态初始化的区别
六、数组内存图
1.Java内存分配
2.数组的内存图
3.总结:
(1)只要是new出来的,一定是在堆里面开辟了一个小空间
(2)如果new了很多次,那么在堆里面有多个小空间,每个小空间都有各自的数据
4.两个数组指向同一个空间的内存
总结:
当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了
七、数组常见问题
public class test15 {public static void main(String[] args) {//1.定义一个数组int[] arr={1,2,3,4,5};//长度:5//最小索引:0//最大索引:4(数组的长度-1)System.out.println(arr[10]);//小结://索引越界异常//原因:访问了不存在的索引//避免:索引的范围}
}
小结:
索引越界异常原因:访问了不存在的索引避免:索引的范围
八、数组常见操作
1.求最值
public class test16 {public static void main(String[] args) {//定义数组求最大值: 33,5,22,44,55//扩展问题//1.根据求最大值的思路,自己改写一下求最小值//2.为什么max要记录为arr[0],默认值不能为0呢?//不能写0,当数组元素里面有负数时,这时可能最终结果是数组原来不存在的数据//max的初始值一定要是数组中的值//循环的开始条件一定是0吗//循环的开始条件如果是0,那么第一次循环的时候就是自己和自己比了一下,对结果没有任何影响,但是效率偏低//为了提高效率,减少一次循环的次数,循环开始条件可以改为1//1.定义数组用来存储5个值int[] arr={33,5,22,44,55};//2.定义一个变量max用来存储最大值//临时认为0索引的数据是最大的int max=arr[0];//3.循环获取数组中的每一个元素//拿着每一个元素和max比较for (int i = 0; i < arr.length; i++) {//i索引 arr[i]元素if(arr[i]>max){max=arr[i];}}//4.当循环结束之后,max记录的是数组中的最大值System.out.println(max);//55}
}
2.遍历数组求和
import java.util.Random;public class test17 {public static void main(String[] args) {/*需求:生成10个1-100之间的随机数存入数组1.求出所有数据的和2.求所有数据的平均数3.统计有多少个数据比平均数小*///分析://1.定义数组:int[] arr=new int[10];//2.把随机数存入到数组中Random r=new Random();for (int i = 0; i < arr.length; i++) {int number=r.nextInt(100)+1;//把生成的随机数添加到数组中arr[i]=number;}//1.求和int sum=0;for (int i = 0; i < arr.length; i++) {sum=sum+arr[i];}System.out.println("数组中所有数据的和为:"+sum);//2.平均数int avg=sum/arr.length;System.out.println("数组中平均数为:"+avg);//3.统计有多少个数据比平均数少int count=0;for (int i = 0; i < arr.length; i++) {if(arr[i]<avg){count++;}}System.out.println("在数组中,一共有"+count+"个数据,比平均数小");//遍历数据,验证答案for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]+" ");}}
}
3.交换数组中的数据
方法一:
public class test18 {public static void main(String[] args) {/*需求:定义一个数组,将数组中0索引和最大索引的值进行交换*/int[] arr={1,2,3,4,5};//利用第三方变量进行交换int temp=arr[0];arr[0]=arr[4];arr[4]=temp;//遍历数组for (int i = 0; i < arr.length; i++) {System.out.println(arr[i] + " ");}}
}
方法二:
一直交换到 i = j 或者 i > j
public class test19 {public static void main(String[] args) {/*需求:定义一个数组,存入1,2,3,4,5,交换首尾索引对应的元素交换前:1,2,3,4,5交换后:5,2,3,4,1*/int[] arr={1,2,3,4,5};//利用循环去交换数据for (int i = 0,j=arr.length-1; i <j; i++,j--) {//交换变量i和变量j指向的元素int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}//当循环结束之后,那么数据中的数据就实现了首尾交换for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]+" ");}}
}
4.打乱数组中的数据
import java.util.Random;public class test20 {public static void main(String[] args) {/*需求:定义一个数组,存入1~5,要求打乱数组中所有数据的顺序*///难点://如何获取数组中的随机索引// int[] arr={1,2,3,4,5};//索引范围: 0 1 2 3 4
// Random r=new Random();
// int randomindex=r.nextInt(arr.length);
// System.out.println(randomindex);//1.定义数组存储1-5int[] arr={1,2,3,4,5};//2.循环遍历数组,从0索引开始打乱数据的顺序Random r=new Random();for (int i = 0; i < arr.length; i++) {//生成一个随机索引int randomindex=r.nextInt(arr.length);//拿着随机索引指向的元素,与i指向的元素进行交换int temp =arr[i];arr[i]=arr[randomindex];arr[randomindex]=temp;}//当循环结束之后,那么数组中所有的数据已经打乱顺序了for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]+" ");}}
}
总结
今天的内容你是否有所收获呢友友们🥰如果有写的不对的地方,欢迎大家帮我指正.最后,希望友友们点赞收藏一下博客关注后续的Java学习内容哦~😘💕💕