9.Java数组知识大全(下)

简介: 9.Java数组知识大全

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

相关文章
|
30天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
30天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
29 2
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
1月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
46 9
|
1月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
24 3
|
1月前
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
29 6
|
1月前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
23 1
|
1月前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
15 1
|
1月前
|
存储 安全 Java
Java数组(Arrays)详解
Java 中的数组是一种用于存储固定数量同类型数据的高效数据结构,支持连续内存存储和随机访问。数组可以声明并初始化,通过索引访问和修改元素,获取长度,使用循环遍历,支持多维形式,并可通过 `Arrays` 类的方法进行复制和排序。数组具有固定大小和类型安全的特点,但需注意越界等问题。灵活运用数组能显著提升编程效率。
|
1月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
35 0
下一篇
无影云桌面