复习知识点八之数组

目录

数组

 静态初始化练习

打印

索引

数组遍历

 练习1:遍历数组并求和

练习2:统计个数 

 练习3:变化数据​编辑

数组的动态初始化 

 数组的动态初始化和静态初始化的区别​编辑

 数组的常见问题

 数组常见操作

练习1:求最值

​编辑

练习2 : 遍历数组求和

 练习3:

练习4:

 数组的内存图


数组

 

 

 静态初始化练习

public class ArrayDemo1 {
    public static void main(String[] args) {
        //格式
        //静态初始化

        //需求1: 定义数组存储5个学生的年龄
        int[] arr1 = new int[]{12,23,32,45};
        int[] arr2 = {12,23,32,45};
        //需求2: 定义数组存储3个学生的姓名
        String[] arr3 = new String[]{"张三","李四","万五"};
        String[] arr4 = {"张三","李四","万五"};
        //需求3: 定义数组存储4个学生的身高
        double[] arr5 = new double[]{1.90,1.76,1.56};
        double[] arr6 ={1.90,1.76,1.56};
    }
}

打印

 

索引

利用索引对数组中的元素进行访问
1. 获取数组里面的元素
 格式 : 数组名[索引]
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        //获取数组中的第一个元素
        //其实就是0索引上对应的元素
        int number = arr[0];
        System.out.println(number);//1

    }
}
2. 把 数据存储到数组中
格式 :  数组名[索引] = 具体数据/ 变量
细节 : 一旦覆盖之后,原来的数据就不存在了
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        //2. 把 数据存储到数组中
        //格式 :  数组名[索引] = 具体数据/ 变量
        //细节 : 一旦覆盖之后,原来的数据就不存在了
        arr[0] = 100;
        System.out.println(arr[0]);//100
    }
}

数组遍历

代码练习:

public class ArrayDemo3 {
    public static void main(String[] args) {
        //1. 定义数组
        int[] arr = {1,2,3,4,5};
        //2. 获取数组里面所有的元素
        //格式: 数组名[索引]
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

 练习1:遍历数组并求和

 分析:

1. 定义数组,添加数据

2. 遍历数组得到每一个数据,累积求和

    i 依次表示数组里面的每一个索引

    arr[i] 依次表示数组里面的每一个元素

public class ArrTest1 {
    public static void main(String[] args) {

        //1. 定义数组,添加数据
        int[] arr = {1,2,3,4};

        //定义求和变量
        int sum =0;
        //2. 遍历数组得到每一个数据,累积求和
        for (int i = 0; i < arr.length; i++) {
            //i  依次表示数组里面的每一个索引
            //arr[i] 依次表示数组里面的每一个元素
            sum = sum + arr[i];
        }
        //当循环结束之后,sum 的值是累加之后的每一个结果
        System.out.println(sum);
    }
}

练习2:统计个数 

public class ArrTest2 {
    public static void main(String[] args) {

        //1. 定义数组,存储数据
        int[] 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++;
            }
        }
        //当循环结束之后,sum 的值是累加之后的每一个结果
        System.out.println("数组中能被3整除的数字有"+ count);
    }
}

 练习3:变化数据

public class ArrTest3 {
    public static void main(String[] args) {
        //1. 分析
        //定义一个数组,存 1,2,4,5,6,7
        int[] arr = {1, 2, 4, 5, 6, 7};
        //2. 遍历数组得到每一个元素
        for (int i = 0; i < arr.length; i++) {
            //3. 对每一个元素进行判断
            //奇数
            //偶数
            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]);
        }
    }
}

数组的动态初始化 

 数组的动态初始化和静态初始化的区别

 数组的常见问题

public class ArrayDemo4 {
    public static void main(String[] args) {
        //1. 定义数组
        int[] arr = {1,2,3,4,5};
        //2. 长度 :5
        //最小索引: 0
        //最大索引: 4(数组的长度)
        System.out.println(arr[10]);
    }
}

异常 

 小结:

索引越界异常

原因:  访问了不存在的索引

避免:  索引的范围

最小索引: 0

最大索引: 4 (数组的长度 - 1)

 数组常见操作

  

练习1:求最值

public class ArrTest4 {
    public static void main(String[] args) {
        //1.定义数组用来存储5个值
        int[] arr = {33,4,22,44,55};
        //2. 定义一个变量max用来存储最大值
        //临时认为0索引的数据是最大的
        int max = arr[0];
        //3. 循环获取数组中的每一个元素
        //拿着每一个元素跟max进行比较
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max){
                max = arr[i];
            }
        }
        //当循环结束之后,max记录的就是数组中的最大值
        System.out.println(max);
    }
}

扩展问题:

  • 为什么max 要记录为 arr[0]  ,默认值不能为 0  吗?  不能
  • max 的初始值一定要是数组中的值.
  • 循环中开始条件一定是 0 吗 ?
  • 循环中开始条件如果为 0 ,那么第一次循环的时候就是自己跟自己比较,对结果没有任何影响,但是效率低,为了提高效率,减少一次循环的次数,循环开始的条件可以写 1 .

练习2 : 遍历数组求和

生成1~100之间的随机数 

public class ArrTest5 {
    public static void main(String[] args) {
        //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;
        }

        //一. 求出所有数据的和
        //定义求和的变量
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            //循环得到每一个元素
            //并把元素累加到sum当中
            sum = sum + arr[i];
        }
        System.out.println("数组中所有数据的和为" + sum);

        //二. 求所有的平均数
        int avg = sum / arr.length;
        System.out.println("数组中的平均数为:" + avg);

        //三. 统计有多少个数据比平均值小
        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.print(arr[i]+"  ");
        }
    }
}

 练习3:

 

public class ArrTest7 {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr = {1, 2, 3, 4, 5};
        //2. 利用循环交换数据
        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.print(arr[i]+"  ");
        }
    }
}

练习4:

import java.util.Random;

public class ArrTest8 {
    public static void main(String[] args) {
 /*     //难点
        //如何获取数组中的随机索引
        int[] arr = {1, 2, 3, 4, 5};
        //2. 索引范围 1, 2, 3, 4, 5
        Random r = new Random();
        int randomIndex = r.nextInt(arr.length);
        System.out.println(randomIndex);*/

        int[] arr = {1, 2, 3, 4, 5};
        //循环遍历数组,从 - 索引开始打乱数据的顺序
        Random r = new Random();
        //2, 循环遍历数组
        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.print(arr[i]+ "  ");
        }
    }
}

 数组的内存图

Java 内存分配

 

 ​​​​​​​

猜你喜欢

转载自blog.csdn.net/m0_57448314/article/details/129231578