7-6 找到出勤最多的人(简单易懂版带备注讲解)

这段Java代码实现了一个功能,输入一行包含教师花名册的字符串,通过比较找出出勤次数最多的人名。
摘要由CSDN通过智能技术生成

题目

根据教师的花名册,找到出勤最多的人。

输入格式:

出勤记录单行给出,数据直接使用空格分割。

输出格式:

单行输出(若有多人,人名直接使用空格分割,结尾处没有空格)。

输入样例:

在这里给出一组输入。例如:

zs ls ww ml zs ls ml zs ww

输出样例:

在这里给出相应的输出。例如:

zs

正文

此处为代码(便于复制):

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String people = sc.nextLine();
        String[] peopleArr = people.split(" ");
        String peopleMax = "";
        int max = 0;
        for (int i = 0; i < peopleArr.length; i++) {
            int num = 0;
            for (int j = i; j < peopleArr.length; j++) {
                if (peopleArr[i].equals(peopleArr[j])) {
                    num += 1;
                }
            }
            if (max <= num) {
                max = num;
            }
        }
        for (int i = 0; i < peopleArr.length; i++) {
            int num = 0;
            for (int j = i; j < peopleArr.length; j++) {
                if (peopleArr[i].equals(peopleArr[j])) {
                    num += 1;
                }
            }
            if (max == num) {
                if (peopleMax.isEmpty()) {
                    peopleMax = peopleArr[i];
                } else peopleMax = peopleMax + " " + peopleArr[i];
            }
        }
        System.out.println(peopleMax);
    }
}

注解

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //相信有基础的同学都知道,是通过 Scanner 类来获取用户的输入
        String people = sc.nextLine();
        //这是对应题目所说的单行输入一行数据,用字符串people来存储
        //这里补充一下nextLine()方法,nextLine()方法是读取一整行,以一个回车符作为结束标记停止扫描
        String[] peopleArr = people.split(" ");
        //创建一个字符串数组peopleArr,用split()方法来分割其中的空格
        String peopleMax = "";
        //保存出勤数量最多的人名
        int max = 0;
        //最高出勤数
        for (int i = 0; i < peopleArr.length; i++) {
            //for循环通过数组peopleArr的数量来限制循环次数
            int num = 0;
            //暂定一个num为个人的出勤数量
            for (int j = i; j < peopleArr.length; j++) {
                //这里的j是i,是要把自己本身算进去,然后向后遍历剩下的人,同样是用数组peopleArr的数量来限制循环次数
                if (peopleArr[i].equals(peopleArr[j])) {
                    //判断当前的数组i是否完全相等于当前的数组j
                    //这里补充一下equals()方法,equals()方法是用来比较两个对象是否等价
                    num += 1;
                    //当每出现一次相同的值,num的值+1
                }
            }
            if (max < num) {
                //判断最高出勤数是否小于某个人的出勤数
                max = num;
                //判断小于时,最高出勤数小于该人的出勤数
            }
        }
        //这个循环只为了选出最高的出勤数
        
        for (int i = 0; i < peopleArr.length; i++) {
            //这类的代码同上
            int num = 0;
            for (int j = i; j < peopleArr.length; j++) {
                if (peopleArr[i].equals(peopleArr[j])) {
                    num += 1;
                }
            }
            if (max == num) {
                //如果这时的最高出勤数和此人的出勤数相等则将会被选中
                if (peopleMax.isEmpty()) {
                    //这里是判断他是否是第一个人
                    //这里补充一下isEmpty()方法,isEmpty() 方法用于判断字符串是否为空
                    peopleMax = peopleArr[i];
                    //为空则直接添加当前人的名字
                } else peopleMax = peopleMax + " " + peopleArr[i];
                //不为空则先加个空格再加人名,对应题目的输出格式
            }
        }
        System.out.println(peopleMax);
        //输出出勤数量最多的人名
    }
}

代码演示

输入题目的输入样例:zs ls ww ml zs ls ml zs ww

当其中的ls多了一次出勤后:zs ls ww ml zs ls ml zs ww ls

 当其中的ww又多了一次出勤后:zs ls ww ml zs ls ml zs ww ls ww

 感谢您的观看,注解大部分都是大白话且是手打的,若是能给我个赞那将是对我莫大的称赞

若还有不懂的地方,欢迎来评论区询问

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值