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-5 int[] 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学习内容哦~😘💕💕