day04-数组

学习目标

能够知道数组的定义格式   
	动态初始化:指定数组的长度,有默认初始化值
	静态初始化:创建数组并附初始化值
能够使用两种方式完成数组元素的初始化 
	动态初始化:int[] arr = new int[10];
	静态初始化:int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
    静态初始化:int[] arr = {1,2,3,4,5,6,7,8,9,10};
能够知道数组在内存中的初始化过程
     栈:运行方法(main方法入栈执行),在方法中定义变量 int[] arr
     堆:存储对象,new出来的 new int[10];
     方法区:存储运行后的.class文件
能够完成数组的遍历操作(重点)            
	int[] arr = {1,2,3,4,5,6,7,8,9,10};  数组名.fori==>arr.fori
	for(int i=0; i<arr.length; i++){
		System.out.println(arr[i]);
	}
能够完成数组的获取最值操作
	int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
	int max = arr[0];
	int min = arr[0];
    for(int i=0; i<arr.length; i++){
		if(arr[i]>max){
            max = arr[i];
        }
        if(arr[i]<min){
            min = arr[i];
        }
	}
	System.out.println(max);
	System.out.println(min);
能够知道数组在运行过程中出现的异常
	1.数组的索引越界异常,访问了数组不存在的索引  int[] arr = {1,2,3}; sout(arr[3]);
	ArrayIndexOutOfBoundsException
	2.数组的空指针异常,数组的值为null,不能在使用数组了  int[] arr = null; sout(arr.length);
	NullPointerException

第一章:数组的定义格式

1.数组的概述

  • 数组:是引用数据类型的一种,是一个容器,可以存储同种数据类型的多个数据
  • 数组可以存储的数据类型有基本数据类型(4类8种),也可以存储引用数据类型(字符串String,自定义类型Person)
  • 数组的长度是固定的,不能改变

2.数组的定义格式

package com.itheima.demo01Array;

/*
    数组的定义
 */
public class Demo01Array {
    public static void main(String[] args) {
        //1.动态初始化创建数组:指定数组的长度,数组中有默认初始化值
        //创建一个长度为3的int类型的数组
        int[] arr1 = new int[3];//{0,0,0}

        /*
            数组也是定义了一个引用数据类型的变量
            数据类型    变量名  = 创建对象;
            int[]       arr1    = new int[3];
            等号的左边:
                int:数组中元素的类型
                []:定义数组的固定格式
                arr1:给数组起了一个名字
            等号右边:
                new:创建对象的关键字
                int:数组中元素的类型(必须和左边一样)
                []:定义数组的固定格式
                3:指定数组的长度
            =:赋值运算符:把右边的对象赋值给左边的数组类型的变量
         */

        //创建一个长度为5的double类型的数组
        double[] arr2 = new double[5];//{0.0,0.0,0.0,0.0,0.0}

        //2.静态初始化创建数组:在创建数组的时候,给数组赋指定的初始值
        //创建一个int类型的数组,给数组赋值1,2,3,4,5
        int[] arr3 = new int[]{1,2,3,4,5};

        //创建一个String类型的数组,给数组赋值"沈腾","贾玲","小岳岳"
        String[] arr4 = new String[]{"沈腾","贾玲","小岳岳"};

        //静态初始化简化格式
        int[] arr5 = {1,2,3,4,5};
        String[] arr6 = {"沈腾","贾玲","小岳岳"};
    }
}

3.数组的使用格式

package com.itheima.demo01Array;

/*
    数组的使用
        1.可以使用数组的名字和数组的索引(房间号),来操作数组中存储值(元素)
            格式: 数组名[索引] arr[0] arr[1]...
            String[] arr = new String[]{"沈腾","贾玲","小岳岳"};
            a.取出数组中的元素的值
                直接输出值: System.out.println(arr[0]); //"沈腾"
                把值赋值给一个变量:  数组的数据类型 变量名 = 数组名[索引]
                    String s1 = arr[1]; System.out.println(s1);//贾玲
            b.给数组中的元素赋值
                数组名[索引] = 新的值;
                给数组中2索引处的元素重新赋一个值"郭德纲"  arr[2] = "郭德纲";
                System.out.println(arr[2]);
       2.数组有一个属性叫length,可以获取数组的长度(存储的元素个数)
                arr.length;==>3
 */
public class Demo02Array {
    public static void main(String[] args) {
        //定义一个数组
        String[] arr = new String[]{"沈腾","贾玲","小岳岳"};
        //a.取出数组中的元素的值
        //直接输出
        System.out.println(arr[0]);//沈腾
        System.out.println(arr[1]);//贾玲
        System.out.println(arr[2]);//小岳岳
        //把值赋值给一个变量
        String s1 = arr[1];
        System.out.println("s1:"+s1);//s1:贾玲

        //b.给数组中的元素赋值
        // 给数组中2索引处的元素重新赋一个值"郭德纲"
        arr[2] = "郭德纲"; //{"沈腾","贾玲","郭德纲"};
        System.out.println(arr[2]);//郭德纲

        //2.数组有一个属性叫length,可以获取数组的长度
        System.out.println(arr.length);//3
    }
}

数组定义和使用练习

package com.itheima.demo01Array;

/*
    数组使用练习:
    1.创建一个长度为5的int类型的数组
    2.取出数组3索引处的元素并打印
    3.给数组3索引处的元素重新赋值88
    4.取出数组3索引处的元素并打印
    5.把数组3索引处的元素赋值给一个变量a,打印变量a的值
    6.打印数组的长度

    3索引:第4个元素
    数组的索引[0,数组长度-1]
 */
public class Demo03ArrayTest {
    public static void main(String[] args) {
        //1.创建一个长度为5的int类型的数组
        int[] arr = new int[5];//{0,0,0,0,0}
        //2.取出数组3索引处的元素并打印
        System.out.println(arr[3]);//0
        //3.给数组3索引处的元素重新赋值88
        arr[3] = 88;//{0,0,0,88,0}
        //4.取出数组3索引处的元素并打印
        System.out.println(arr[3]);//88
        //5.把数组3索引处的元素赋值给一个变量a,打印变量a的值
        int a = arr[3];
        System.out.println("a:"+a);//a:88
        //6.打印数组的长度
        System.out.println(arr.length);//5
    }
}

4.数组的遍历

package com.itheima.demo01Array;

/*
    数组遍历(遍历数组):依次打印数组中的元素
 */
public class Demo04Array {
    public static void main(String[] args) {
        //定义一个String类型的数组,并进行静态初始化赋值
        String[] arr = {"科比","乔丹","韦德","姚明","蔡徐坤","詹姆斯"};
        //依次打印数组中的元素
        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]);
        System.out.println(arr[5]);
        System.out.println("------------------------------");
        //使用循环来遍历数组:循环的作用就是依次获取数组的索引 [0,arr.length-1]
        for (int i=0; i<arr.length; i++){
            System.out.println(arr[i]);
        }
    }
}

5.数组操作的常见问题(避免)

package com.itheima.demo01Array;

/*
    数组操作的常见问题
 */
public class Demo05ArrayError {
    public static void main(String[] args) {
        //1. 定义错误:
        //动态初始化定义数组,必须指定长度
        //int[] arr = new int[];//错误,没有指定长度
        //静态初始化,不能写长度
        //int[] arr = new int[3]{10,20,30,40};//错误,这种格式下,不能指定长度

        /*
            2. 索引越界异常: 使用索引,超出了索引的范围,就会抛出索引越界异常
            索引越界异常:在程序运行的时候会抛出
         */
        int[] arr = new int[3];//{0,0,0}  索引:0,1,2
        //System.out.println(arr[3]);//ArrayIndexOutOfBoundsException: 3

        /*
            3. 空指针异常:给数组变量赋了一个值null(空),那么对象就不存在了(房子被拆了)
                在使用数组,就会抛出空指针异常
         */
        arr = null;
        System.out.println(arr[0]);//NullPointerException
    }
}

6.数组练习

package com.itheima.demo01Array;

/*
    数组遍历练习
 */
public class Demo06ArrayTest {
    public static void main(String[] args) {
        //1. 请定义5个长度的数组,可以存储并打印(遍历)以下5名学员的姓名:
        //“杨幂”,“刘恺威”,“古力娜扎”,“柳岩”,“郭德纲”
        String[] arr1 = new String[5];
        arr1[0] = "杨幂";
        arr1[1] = "刘恺威";
        arr1[2] = "古力娜扎";
        arr1[3] = "柳岩";
        arr1[4] = "郭德纲";
        for(int i=0; i<arr1.length;i++){
            System.out.println(arr1[i]);
        }
        System.out.println("---------------------------------------");
        //2. 请定义5个长度的数组,可以存储并打印(遍历)5名学员的性别:
        //    ‘女’,  ‘男’,  ‘女’,  ‘女’,  ‘男’
        char[] arr2 = {'女','男','女','女','男'};
        //遍历的快捷键: 数组名.fori==>回车
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }
        System.out.println("---------------------------------------");
        //3. 请定义5个长度的数组,可以存储并打印(遍历)5名学员的身高:
        //1.65,   1.85,   1.70,   1.68,   1.85
        double[] arr3 = {1.65,1.85,1.70,1.68,1.85};
        for (int i = 0; i < arr3.length; i++) {
            System.out.println(arr3[i]);
        }
        System.out.println("---------------------------------------");
        //4. 请将以上三个数组“反向遍历”,并打印每个元素!!
        for(int i= arr1.length-1; i>=0 ; i--){
            //System.out.println(arr1[i]);//i=4,3,2,1,0
            System.out.print(arr1[i]+" ");
        }
        System.out.println();//换行
    }
}

第二章:数组的内存图解

1.初识 JVM 运行时内存

  • 方法区:加载运行后的.class文件

  • 栈内存:运行方法(main方法),方法中的变量存储的都是局部变量,在出了变量的作用域,就会在内存中消失

  • 堆内存:存储对象(new出来的)

    • 每个堆内存中的对象都有一个十六进制的地址值

    • 我们可以使用这个地址值,来找到这个对象

    • 堆内存中存储数据都有默认初始化值

      • 基本数据类型:4类8种

        整数:byte,short,int,long初始化值为0

        小数:float,double初始值为0.0

        字符:char初始值为’\u0000’,也就是一个空格 ’ ’

        布尔:boolean初始值为false

      • 引用数据类型:数组,集合,类(自定义,java提供的(String,Scanner,Random))

        所有的引用数据类型,默认初始化值都是null(null常量)

  • 寄存器:即将交给CPU执行的指令

  • 本地方法区:存储native修饰的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLSbjqKv-1619531404871)(img/1617677874374.png)]

2.一个数组的内存图

package com.itheima.demo02Array;

/*
    一个数组的内存图
 */
public class Demo01Array {
    public static void main(String[] args) {
        //定义一个长度为3的int类型数组
        int[] arr = new int[3];
        //依次打印数组的名字和数组中元素 十六进制(0-9 a-f(10-15))
        System.out.println(arr);//[I@4554617c
        System.out.println(arr[0]);//0
        System.out.println(arr[1]);//0
        System.out.println(arr[2]);//0
        //给数组中元素赋值
        arr[1] = 88;
        arr[2] = 99;
        //依次打印数组的名字和数组中元素
        System.out.println(arr);//[I@4554617c
        System.out.println(arr[0]);//0
        System.out.println(arr[1]);//88
        System.out.println(arr[2]);//99
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ii1kyLTY-1619531404874)(img/1617678673749.png)]

3.两个数组的内存图

package com.itheima.demo02Array;

/*
    两个数组的内存图
 */
public class Demo02Array {
    public static void main(String[] args) {
        double[] arr1 = new double[3];
        double[] arr2 = {1.1,2.2,3.3};
        //依次打印数组名和数组中的元素
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
        //改变数组中元素的值
        arr1[1] = 100.0;
        arr2[2] = 8.8;
        //依次打印数组名和数组中的元素
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jsHUdz11-1619531404876)(img/1617679358892.png)]

4.两个数组指向一个对象内存图

package com.itheima.demo02Array;

/*
    两个数组指向一个对象内存图
 */
public class Demo03Array {
    public static void main(String[] args) {
        String[] arr1 = new String[]{"迪丽热巴","古力娜扎","佟丽娅"};
        //依次打印数组名和数组中元素
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        //定义一个数组,把arr1的地址赋值新数组
        String[] arr2 = arr1;
        //改变数组中元素的值
        arr2[1] = "柳岩";
        //依次打印数组名和数组中元素
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWXDvV63-1619531404877)(img/1617680177107.png)]

第三章:数组的常见操作

1.挑选数组中符合条件的元素

需求:有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印:大于等于130斤以上的体重值。

package com.itheima.demo03Test;

/*
    常见操作一:挑选
        有以下数组,存储了6名学员的体重:
        int[] arr = {120,130,110,125,128,164};
        请编程计算并打印:大于等于130斤以上的体重值。
    分析:
        1.定义一个数组,存储学员的体重
        2.遍历数组,获取数组中的每一个元素
        3.判断获取到的元素是否大于等于130
        4.是则打印
 */
public class Demo01Test {
    public static void main(String[] args) {
        //1.定义一个数组,存储学员的体重
        int[] arr = {120,130,110,125,128,164};
        //2.遍历数组,获取数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //3.判断获取到的元素是否大于等于130
            if(arr[i]>=130){
                //4.是则打印
                System.out.println(arr[i]);
            }
        }
    }
}

2.数组中元素求和

需求:有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印这6名学员的总体重。

package com.itheima.demo03Test;

/*
    常见操作二:求和
        有以下数组,存储了6名学员的体重:
        int[] arr = {120,130,110,125,128,164};
        请编程计算并打印这6名学员的总体重。
    分析:
        1.定义一个数组,存储学员的体重
        2.定义一个初始化变量,值为0,记录累加求和
        3.遍历数组,获取数组中的每一个元素
        4.累加求和
        5.输出求和结果
 */
public class Demo02Test {
    public static void main(String[] args) {
        //1.定义一个数组,存储学员的体重
        int[] arr = {120,130,110,125,128,164};

        //2.定义一个初始化变量,值为0,记录累加求和
        int sum = 0;

        //3.遍历数组,获取数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //4.累加求和
            sum+=arr[i];
        }
        
        //5.输出求和结果
        System.out.println("sum:"+sum);
    }
}

3.数组中元素求平均值

需求:有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印这6名学员的平均体重。

package com.itheima.demo03Test;

/*
    常见操作三:求平均值
        有以下数组,存储了6名学员的体重:
        int[] arr = {120,130,110,125,128,164};
        请编程计算并打印这6名学员的平均体重。
    分析:
        1.定义一个数组,存储学员的体重
        2.定义一个初始化变量,值为0,记录累加求和
        3.遍历数组,获取数组中的每一个元素
        4.累加求和
        5.循环结束使用和/数组的长度,平均值
        6.输出平均值
 */
public class Demo03Test {
    public static void main(String[] args) {
        //1.定义一个数组,存储学员的体重
        int[] arr = {120,130,110,125,128,164};
        //2.定义一个初始化变量,值为0,记录累加求和
        int sum = 0;
        //3.遍历数组,获取数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //4.累加求和
            sum+=arr[i];
        }
        //5.循环结束使用和/数组的长度,平均值
        int avg = sum/ arr.length;
        //6.输出平均值
        System.out.println("平均的体重为:"+avg);
    }
}

4.求数组中元素的最大值

需求:有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印这6名学员的最大体重。

package com.itheima.demo03Test;

/*
    常见操作四:求最大值|最小值
        有以下数组,存储了6名学员的体重:
        int[] arr = {120,130,110,125,128,164};
        请编程计算并打印这6名学员的最大体重。
    分析:
       1.定义一个数组,进行静态初始化赋值
       2.定义一个变量作为最大值,把数组的第一个元素赋值给最大值
       3.遍历数组,获取数组中的其他元素
       4.使用遍历得到的元素和最大值比较
       5.如果遍历得到的元素大于最大值,把元素赋值给最大值
       6.输出最大值
 */
public class Demo04Test {
    public static void main(String[] args) {
        //1.定义一个数组,进行静态初始化赋值
        int[] arr = {120,130,110,125,128,164};
        //2.定义一个变量作为最大值,把数组的第一个元素赋值给最大值
        int max = arr[0];
        //3.遍历数组,获取数组中的其他元素
        for (int i = 1; i < arr.length; i++) {
            //4.使用遍历得到的元素和最大值比较
            if(arr[i]>max){
                //5.如果遍历得到的元素大于最大值,把元素赋值给最大值
                max = arr[i];
            }
        }
        //6.输出最大值
        System.out.println("max:"+max);
        System.out.println("---------------------------");
        //计算最小值
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]<min){
                min = arr[i];
            }
            //min = arr[i]<min?arr[i]:min;
        }
        System.out.println("min:"+min);
    }
}

5.统计符合条件元素的个数

需求:有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印:大于、等于130的元素的个数。

package com.itheima.demo03Test;

/*
    常见操作五:统计
        有以下数组,存储了6名学员的体重:
        int[] arr = {120,130,110,125,128,164};
        请编程计算并打印:大于、等于130的元素的个数。
    分析:
        1.定义一个数组,进行静态初始化赋值
        2.定义一个变量,值为0,记录统计的个数
        3.遍历数组,获取数组中的每一个元素
        4.判断获取到的元素大于等于130
        5.是,则统计变量++
        6.输出结果
 */
public class Demo05Test {
    public static void main(String[] args) {
        //1.定义一个数组,进行静态初始化赋值
        int[] arr = {120,130,110,125,128,164};
        //2.定义一个变量,值为0,记录统计的个数
        int count=0;
        //3.遍历数组,获取数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //4.判断获取到的元素大于等于130
            if(arr[i]>=130){
                //5.是,则统计变量++
                count++;
            }
        }
        //6.输出结果
        System.out.println("count:"+count);
    }
}

6.从控制台接收数据

需求:有以下数组:int[] arr = new int[5];

请编程从控制台接收5名学员的年龄,并存储到数组中。
遍历数组,打印每个年龄值。

package com.itheima.demo03Test;

import java.util.Scanner;

/*
    常见操作六:从控制台接收数据
        有以下数组:int[] arr = new int[5];
        请编程从控制台接收5名学员的年龄,并存储到数组中。
        遍历数组,打印每个年龄值。
    分析:
        1.定义一个长度为5的int类型数组
        2.创建Scanner对象,为Scanner变量赋值
        3.遍历数组,获取数组中的每一个元素
        4.使用Scanner对象中的方法nextInt,获取用户键盘输入的年龄,
        5.把用户输入的年龄,给数组中的元素依次赋值
        6.遍历数组,打印每个年龄值
 */
public class Demo06Test {
    public static void main(String[] args) {
        //1.定义一个长度为5的int类型数组
        int[] arr = new int[5];
        //2.创建Scanner对象,为Scanner变量赋值
        Scanner sc = new Scanner(System.in);
        //3.遍历数组,获取数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //4.使用Scanner对象中的方法nextInt,获取用户键盘输入的年龄
            System.out.println("请输入第"+(i+1)+"位学生的年龄:");
            //int age = sc.nextInt();
            //5.把用户输入的年龄,给数组中的元素依次赋值
            //arr[i] = age;
            arr[i] = sc.nextInt();
        }
        System.out.println("----------------------------------------------");
        //6.遍历数组,打印每个年龄值
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

7.随机数填充数组

需求:有以下数组:int[] arr = new int[5];请编程随机生成5个1—100的整数,并存储到数组中。
遍历数组,打印每个值。

package com.itheima.demo03Test;

import java.util.Random;

/*
    常见操作七:随机数填充数组
        有以下数组:int[] arr = new int[5];请编程随机生成5个1—100的整数,并存储到数组中。
        遍历数组,打印每个值。
   分析:
        1.定义一个长度为5的int类型的数组
        2.创建Random对象,给Random变量赋值
        3.遍历数组,获取数组中的每一个元素
        4.随机产生一个1-100之间的整数,给遍历得到的元素赋值
        5.遍历数组,打印每个值
 */
public class Demo07Test {
    public static void main(String[] args) {
        //1.定义一个长度为5的int类型的数组
        int[] arr = new int[5];
        //2.创建Random对象,给Random变量赋值
        Random r = new Random();
        //3.遍历数组,获取数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //4.随机产生一个1-100之间的整数,给遍历得到的元素赋值
            arr[i] = r.nextInt(100)+1;
        }
        //5.遍历数组,打印每个值
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

综合案例

综合案例1-成绩分析系统

需求:

分析学员的成绩,计算:平均分、最高分、最低分

现以一个班级10个同学的数学成绩为例,进行统计。求这个班级的数学平均成绩,最高分,最低分。

思路分析:

1.定义一个数组,对这10个同学的数学成绩进行保存
2.定义一个变量sum,初始值为0,记录累加求和
3.定义一个变量max,记录最高分,把数组第一个元素赋值给max
4.定义一个变量min,记录最低分,把数组第一个元素赋值给min
5.遍历数组,获取每一个同学的成绩
6.把遍历得到的成绩累加求和
7.判断遍历得到的成绩>max,则赋值给max
8.判断遍历得到的成绩<min,则赋值给min
9.根据成绩总和,计算平均值
10.输出平均成绩,最高分,和最低分

package com.itheima.demo04Test;

/*
    综合案例1-成绩分析系统
        分析学员的成绩,计算:平均分、最高分、最低分
        现以一个班级10个同学的数学成绩为例,进行统计。求这个班级的数学平均成绩,最高分,最低分。
   分析:
        1.定义一个数组,对这10个同学的数学成绩进行保存
        2.定义一个变量sum,初始值为0,记录累加求和
        3.定义一个变量max,记录最高分,把数组第一个元素赋值给max
        4.定义一个变量min,记录最低分,把数组第一个元素赋值给min
        5.遍历数组,获取每一个同学的成绩
        6.把遍历得到的成绩累加求和
        7.判断遍历得到的成绩>max,则赋值给max
        8.判断遍历得到的成绩<min,则赋值给min
        9.根据成绩总和,计算平均值
        10.输出平均成绩,最高分,和最低分
 */
public class Demo01Test {
    public static void main(String[] args) {
        //1.定义一个数组,对这10个同学的数学成绩进行保存
        int[] arr = {99,88,100,90,87,66,32,100,96,59};
        //2.定义一个变量sum,初始值为0,记录累加求和
        int sum = 0;
        //3.定义一个变量max,记录最高分,把数组第一个元素赋值给max
        int max = arr[0];
        //4.定义一个变量min,记录最低分,把数组第一个元素赋值给min
        int min = arr[0];
        //5.遍历数组,获取每一个同学的成绩
        for (int i = 0; i < arr.length; i++) {
            //6.把遍历得到的成绩累加求和
            sum+=arr[i];

            //7.判断遍历得到的成绩>max,则赋值给max
            if(arr[i]>max){
                max = arr[i];
            }
            //8.判断遍历得到的成绩<min,则赋值给min
            if(arr[i]<min){
                min = arr[i];
            }
        }
        //9.根据成绩总和,计算平均值
        int avg = sum/arr.length;

        //10.输出平均成绩,最高分,和最低分
        System.out.println("平均成绩:"+avg);
        System.out.println("最高分:"+max);
        System.out.println("最低分:"+min);
    }
}

综合案例2-双色球开奖核心算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WUbLPMgj-1619531404879)(img/1614874354014.png)]

1、出奖号码由6个红球 + 1蓝球组成
2、每个红球是1—33之间的一个数字
3、蓝球是1—16之间的一个数字
4、本题目咱时不考虑:重复、红球排序的问题

package com.itheima.demo04Test;

import java.util.Random;

/*
    综合案例2-双色球开奖核心算法
    需求:
        1、出奖号码由6个红球 + 1蓝球组成
        2、每个红球是1—33之间的一个数字
        3、蓝球是1—16之间的一个数字
        4、本题目咱时不考虑:重复、红球排序的问题
   分析:
        1.定义一个长度为6的int类型的数组
        2.创建Random对象,为Random变量赋值
        3.遍历数组,获取每一个元素
        4.随机产生一个1-33之间的数字,给数组中的元素赋值
        5.随机产生一个1-16之间的数字,赋值给一个变量,作为蓝色球
        6.输出最终产生的双色球(遍历数组获取红球+篮球)
 */
public class Demo02Test {
    public static void main(String[] args) {
        //1.定义一个长度为6的int类型的数组
        int[] arr = new int[6];
        //2.创建Random对象,为Random变量赋值
        Random r = new Random();
        //3.遍历数组,获取每一个元素
        for (int i = 0; i < arr.length; i++) {
            //4.随机产生一个1-33之间的数字,给数组中的元素赋值
            arr[i] = r.nextInt(33)+1;
        }
        //5.随机产生一个1-16之间的数字,赋值给一个变量,作为蓝色球
        int blue = r.nextInt(16)+1;
        //6.输出最终产生的双色球(遍历数组获取红球+蓝球)
        System.out.print("红球:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println("蓝球:"+blue);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9oE8Wg5-1619531404880)(img/1617699441025.png)]

综合案例3-盗墓解密程序

有一个古老的国王墓地,谁能找到解密程序就将能打开墓室大门;两个小偷在找到墓地后于是就开始研究规则
规则为:一串数字无论正着读还是反着读都是一样的。如:1234321 是有效的;345643 是无效的。

请你编程实现该程序的判断。

分析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B51S72bY-1619531404881)(img/1617700193461.png)]

1、定义一个数组,用于保存输入的数字
2、使用循环判断数组中的第一个数,是否和最后一个相同,依此类推
3、若都相同,则为有效的数字
4、最后输出是否解密成功

package com.itheima.demo04Test;

/*
    综合案例3-盗墓解密程序
        有一个古老的国王墓地,谁能找到解密程序就将能打开墓室大门;两个小偷在找到墓地后于是就开始研究规则
        规则为:一串数字无论正着读还是反着读都是一样的。如:1234321 是有效的;345643  是无效的。
        请你编程实现该程序的判断。
    分析:
        1.定义一个数组,进行静态初始化赋值(赋值小偷的输入的密码)
        2.定义一个布尔类型标记变量,值为true
        3.遍历数组,获取数组的每一个元素
        4.依次比较数组的首尾元素是否相等
        5.首尾元素不同,把标记的值修改为false
        6.结束循环
        7.对标记进行判断
            true:解密成功
            false:解密失败
 */
public class Demo03Test {
    public static void main(String[] args) {
        //1.定义一个数组,进行静态初始化赋值(赋值小偷的输入的密码)
        int[] arr = {5,4,3,2,1,2,2,4,5};
        //2.定义一个布尔类型标记变量,值为true
        boolean flag = true;
        //3.遍历数组,获取数组的每一个元素
        for (int i = 0; i < arr.length/2; i++) {
            //4.依次比较数组的首尾元素是否相等
            if(arr[i]!=arr[arr.length-1-i]){
                //5.首尾元素不同,把标记的值修改为false
                flag =false;
                //6.结束循环
                break;
            }
        }
        //7.对标记进行判断
        if(flag){
            //true:解密成功
            System.out.println("恭喜您小偷同志,解密成功,可以盗墓了!");
        }else{
            //false:解密失败
            System.out.println("恭喜您小偷同志,解密失败,你可以挂了!");
        }
    }
}

上一篇:day04_常见的运算符


下一篇:day04