java实战(第六篇):统计投票信息

一.需求分析

需求:某个班级80名学生,现在需要组织春游活动,班长以此提供了四个景点A B C D,每个学生只能选择一个景点,请统计最终想去哪个景点的人最多。 

很明显我们这个案例需要存储一对一的数据,就需要考虑使用map集合来做。map集合内存放的都是一对一的键值对。

二.源码思路分析

package maptest;

import java.util.*;

public class test {
    public static void main(String[] args) {
        calc();
    }

    private static void calc() {
        //1.产生80个学生选择的景点数据拿到程序中,用随机数进行模拟。
        List<String> locations = new ArrayList<>();
        String[] names = {"玉龙雪山","长城","少林寺","丽江"};
        Random r = new Random();
        for (int i = 0; i < 80; i++) {
            int index = r.nextInt(names.length);//0,1,2,3
            locations.add(names[index]);
        }

        //2.统计每个景点被选择的次数
        //创建一个Map集合,key为景点名称,value为景点被选择的次数
        Map<String,Integer> map = new HashMap<>();//一行创建map集合的经典代码
        for (String location : locations) {
            //判断map集合中是否有这个景点
            if(map.containsKey(location)){
                //如果有这个景点,就让这个景点对应的value值加1
                Integer count = map.get(location);
                map.put(location,count+1);
            }else{
                //如果没有这个景点,就添加这个景点,value值初始化为1
                map.put(location,1);
            }
        }

        //3.遍历map集合,将结果打印出来(只需要打印最后的结果,每个景点被选择的次数)
        map.forEach((k,v)-> System.out.println(k+"被选择"+v+"次"));

        //4.找到哪个景点选择人数最多,并打印出来
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            if(entry.getValue()==Collections.max(map.values())){
                System.out.println("选择人数最多是:"+entry.getKey());
            }
            if(entry.getValue()==Collections.min(map.values())){
                System.out.println("选择人数最少是:"+entry.getKey());
            }
        }
    }
}

下面我来讲解一下这篇代码:

一.先讲解注释1. 

我们首先需要产生80个学生选择的景点数据,我们用到了arraylist这个集合,同样是用到了多态的思想:Arraylist为List提供了接口的具体实现,同时将这个集合内的数据固定为String类型,接着添加四个景点,引入随机数遍历这个字符串names,遍历到的数据加入到集合locations中。

二.接着讲解注释2.

首先创建一个Map集合,key为景点名称,value为景点被选择的次数,其中固定key类型为String,value类型为Integer,增强for循环遍历map集合,再给读者讲解一下这里的for循环,locations这个集合已经固定类型为String,location是创建的遍历对象。后面进行if判断。

三.讲解注释3.

这是一个map集合的功能,调用forEach功能遍历,k代表key,v代表value。

四.最后讲解注释4.

首先通过map.entrySet()获取所有键值对,在遍历过程中,用Collections.max()和Collections.min()实时计算全局最大/最小值,再通过==比较当前景点的选择次数是否等于极值,若匹配则输出结果。

看到这里,你应该对这个案例有了自己的理解和方法,那就自己实践起来吧。你的点赞和关注是对我最大的支持,如果有问题也可以在评论区交流哦!!


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值