Java数组缩减案例——成绩录入,已严格按照业务给出

前言

大一下学期学Java,第一次写博客,在Java基础阶段的数组部分,数组的缩减是数组基础阶段的经典问题,我现在用一个案例把它完善,让代码的逻辑更加严谨。

案例——成绩录入数组缩减问题

希望对大家有所帮助。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数组通过键盘录入来初始化

public class Text2 {
    public static void main(String[] args) {
        //键盘录入成绩
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字的长度:");
        //用leanth变量接受长度
        int length = scanner.nextInt();
        int[] score = new int[length];
        //遍历数组,输入第几个成绩,依次录入
        for (int i = 0; i < score.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个成绩");
            score[i] = scanner.nextInt();
         }
       }
     }

二、初始化菜单窗口,用swich分支语句来编写,里面的语句都定义为方法,完善操作

        OUT://这里用到OUT来结束多层循环,break只能结束一层循环
        //定义死循环,录入成绩后,可反复操作,后续通过操作来终止整个代码运行
        while (true) {

            System.out.println("请输入要进行的操作编号");
            System.out.println("1.显示所有的成绩");
            System.out.println("2.求最好的成绩");
            System.out.println("3.求平均成绩");
            System.out.println("4.删除一个随机成绩,并且显示新的所有成绩");
            int id = scanner.nextInt();
            switch (id) {
                case 1:
                    //显示成绩场景
                    point1(score);
                    System.out.println("==================");
                    break;
                case 2:
                    //显示最好成绩场景
                    point2(score);
                    System.out.println("==================");
                    break;
                case 3:
                    //求最好成绩场景
                    point3(score);
                    System.out.println("==================");
                    break;
                case 4:
                    //删除一个数组,并显示剩下的成绩
                    point4(score, scanner);
                    System.out.println("==================");
                    break;
                default:
                    System.out.println("你的操作有误,请重新操作");
                    break;
            }

三、继续完善后续操作

//定义死循环,反复执行命令
                while (true) {
                System.out.println("5.退出操作命令");
                System.out.println("6.继续执行");
                int point = scanner.nextInt();
                if (point == 5){
                    break OUT;
                }else if (point == 6){
                    System.out.println("继续执行!");
                    break;
                }else {
                    System.out.println("没有该操作命令,请重新输入");
                }
            }

前三个求平均数方法的具体代码

    public static void point1(int[] score) {
        for (int i = 0; i < score.length; i++) {

            System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
        }
    }

    public static void point2(int[] score) {
        int max = score[0];
        for (int i = 1; i < score.length; i++) {
            if (max < score[i]) {
                max = score[i];
            }
        }
        System.out.println("最好的成绩为" + max);

    }

    public static void point3(int[] score) {
        double sud = 0;
        int sum = 0;
        for (int i = 0; i < score.length; i++) {
            sum += score[i];
        }
        sud = sum / (score.length);
        System.out.println("平均成绩" + sud);
    }

核心部分,最难的操作

这里定义死循环,反复操作,在操作的同时,要满足原来的数组指向新数组,其放在的位置,都很严谨,具体看注释

在这里插入代码片 public static void point4(int[] score, Scanner scanner) 
        //定义死循环,反复执行删除的操作
        OUT:
        while (true) {
        System.out.println("请删除你所要删除的成绩");
        //定义index索引,用于方便看,不让与循环的局部变量混淆
        int index = 0;
        //定义一个分数变量来结束键盘录入
        
        int scoreRandom = scanner.nextInt();
        
       /*定义一个新数组,(这里在涉及数组知识点
       :一旦数组定义出来,它的元素个数就是固定的,不能随意更改,
       可以通过定义一个新数组,把新数组的地址赋给原数组,也就是原数组指向新数组)*/
       
            int[] scoreNew = new int[score.length - 1];
           /*定义标识符,
           来判断键盘录入的数据是与数组中的数据都不相等,或者有相等的*/
            boolean flag = true;
            for (int i = 0; i < score.length; i++) {

                if (scoreRandom == score[i]) {
                //若出现相同的,则将flag改为false
                    flag = false;
                    //索引为当前的i
                    index = i;


                    /*这里表示的是从当前数据的索引开始,
                    一直到数组最后一个元素,从当前开始依次给前一个数组赋值
                    */

                    for (int j = index + 1; j < score.length; j++) {
                        score[index] = score[j];
                    }
                    /*然后将原数组遍历,
                    如果键盘录入[1,2,3,4,5]
                    选择删除3,这时原数组就成了[1,2,4,5,0],
                    这里的第五个元素没有了,但长度还是5,
                    所以第五个元素就变成了0(若不定义,默认是0)*/


                    //然后将此数组给予新数组
                    for (int f = 0; f < scoreNew.length; f++) {
                        scoreNew[f] = score[f];
                    }
                    //再将原始数组指向新数组,就完成了
                    score = scoreNew;
                }
            }
            //找遍了全部的数组,都没有发现与之相等的,则:
            if (flag) {
                System.out.println("没有该成绩,请重新输入");
            }

            //展示出成绩,显示出变化

            for (int i = 0; i < score.length; i++) {
                System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
                 System.out.println("================");
                System.out.println();
            }
            
            //这里表示的是:当数组小于时就不能再允许删除了

            if (score.length < 1) {
                break;
            }
            //后续操作执行,于上文逻辑相同

            while (true) {
                System.out.println("\n" + "是否继续删除");
                System.out.println("n:" + "退出" + "\t" + "y:" + "继续执行");
                String answer = scanner.next();

                if (answer.equals("n")) {
                    break OUT;
                } else if (answer.equals("y")) {
                    System.out.println("继续执行");
                    break;
                } else {
                    System.out.println("没有该命令,请重新输入");
                }
            }
        }
    }

全部代码展示

package price._1;

import java.util.Scanner;

public class Text2 {
    public static void main(String[] args) {
        //键盘录入成绩
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字的长度:");
        int length = scanner.nextInt();
        int[] score = new int[length];
        //输入第几个成绩,依次录入
        for (int i = 0; i < score.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个成绩");
            score[i] = scanner.nextInt();

        }


        //选择操作,完成流程


        OUT:
        while (true) {

            System.out.println("请输入要进行的操作编号");
            System.out.println("1.显示所有的成绩");
            System.out.println("2.求最好的成绩");
            System.out.println("3.求平均成绩");
            System.out.println("4.删除一个随机成绩,并且显示新的所有成绩");
            int id = scanner.nextInt();
            switch (id) {
                case 1:
                    //显示成绩场景
                    point1(score);
                    System.out.println("==================");
                    break;
                case 2:
                    //显示最好成绩场景
                    point2(score);
                    System.out.println("==================");
                    break;
                case 3:
                    //求最好成绩场景
                    point3(score);
                    System.out.println("==================");
                    break;
                case 4:
                    //删除一个数组,并显示剩下的成绩
                    point4(score, scanner);
                    System.out.println("==================");
                    break;
                default:
                    System.out.println("你的操作有误,请重新操作");
                    break;
            }
            while (true) {
                System.out.println("5.退出操作命令");
                System.out.println("6.继续执行");
                int point = scanner.nextInt();
                if (point == 5){
                    break OUT;
                }else if (point == 6){
                    System.out.println("继续执行!");
                    break;
                }else {
                    System.out.println("没有该操作命令,请重新输入");
                }
            }
        }
    }

    public static void point1(int[] score) {
        for (int i = 0; i < score.length; i++) {

            System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
        }
    }

    public static void point2(int[] score) {
        int max = score[0];
        for (int i = 1; i < score.length; i++) {
            if (max < score[i]) {
                max = score[i];
            }
        }
        System.out.println("最好的成绩为" + max);

    }

    public static void point3(int[] score) {
        double sud = 0;
        int sum = 0;
        for (int i = 0; i < score.length; i++) {
            sum += score[i];
        }
        sud = sum / (score.length);
        System.out.println("平均成绩" + sud);
    }

    public static void point4(int[] score, Scanner scanner) {
        OUT:
        while (true) {
        System.out.println("请删除你所要删除的成绩");
        int index = 0;
        int scoreRandom = scanner.nextInt();
            int[] scoreNew = new int[score.length - 1];

            boolean flag = true;
            for (int i = 0; i < score.length; i++) {

                if (scoreRandom == score[i]) {
                    flag = false;
                    index = i;
                    for (int j = index + 1; j < score.length; j++) {
                        score[index] = score[j];
                    }
                    for (int f = 0; f < scoreNew.length; f++) {
                        scoreNew[f] = score[f];
                    }
                    score = scoreNew;
                }
            }
            if (flag) {
                System.out.println("没有该成绩,请重新输入");
            }

            for (int i = 0; i < score.length; i++) {
                System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
                 System.out.println("================");
                System.out.println();
            }

            if (score.length < 1) {
                break;
            }

            while (true) {
                System.out.println("\n" + "是否继续删除");
                System.out.println("n:" + "退出" + "\t" + "y:" + "继续执行");
                String answer = scanner.next();

                if (answer.equals("n")) {
                    break OUT;
                } else if (answer.equals("y")) {
                    System.out.println("继续执行");
                    break;
                } else {
                    System.out.println("没有该命令,请重新输入");
                }
            }
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千梦初心恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值