Java学习总结-Map综合案例:统计投票信息

分析:

1.我们需要先收集投票信息,但是八十个信息太多了,不能全部手动输入,所以我们可以模拟这个信息。我先用一个字符串存储全部结果“ABCD”,然后通过生成0-3的随机数,然后通过charAt()方法,获取字符。

题外话:通过这个我想到,设计转盘游戏时,怎么控制不同结果的概率。我的方法时增加字符串里不同字符的数量,概率就可以设计了。我又想,前端是怎样,不同的结果播放不同的动画,后端肯定先出一个,然后由前端渲染动画。

2.我们用ArrayList来存储投票信息。

3.然后我们用HashMap来存储统计信息

4.我们先统计出最大投票数,然后遍历HashMap 打印结果。

package com.ding.javaai;

import java.util.*;

public class demo {
    static List<Character> data = new ArrayList<Character>();
    static Map<Character,Integer>  outcome = new HashMap<>();
    public static void main(String[] args) {
        CollectData();
        Statistics();
        System.out.println(outcome);
        System.out.println("--------------------");
        verify();
        System.out.println("--------------------");
        out();
        

    }

    private static void out() {
        char o;
        int maxcount=0;
        // 使用迭代器遍历键值对
        Iterator<Map.Entry<Character, Integer>> iterator = outcome.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<Character, Integer> entry = iterator.next();
            Character key = entry.getKey();
            Integer value = entry.getValue();
            if(maxcount< value)maxcount = value;
        }
        System.out.println("最想去的景点为:");
        iterator = outcome.entrySet().iterator();//迭代器重新指向map开头
        while (iterator.hasNext()) {
            Map.Entry<Character, Integer> entry = iterator.next();
            Character key = entry.getKey();
            Integer value = entry.getValue();
            if(maxcount==value) System.out.println(key+"\t");
        }
    }

    private static void verify() {
        int a,b,c,d;
        a=b=c=d=0;
        char k;
        for(int i = 0; i < data.size();i++){
            k = data.get(i);
            switch (k){
                case 'A': a++;break;
                case 'B': b++;break;
                case 'C': c++;break;
                case 'D': d++;break;
            }
        }
        System.out.println("a/b/c/d\t"+a+"/"+b+"/"+c+"/"+d);
    }

    private static void Statistics() {
        for (char c:data) {
            switch (c){
                case 'A': Add(c);break;
                case 'B': Add(c);break;
                case 'C': Add(c);break;
                case 'D': Add(c);break;
            }
        }
    }

    private static void Add(char c) {
        if (outcome.containsKey(c)) {
            int tmp = outcome.get(c);
            tmp++;
            outcome.put(c, tmp);

        } else {
            // 若键不存在,初始化为 1
            outcome.put(c, 1);
        }
    }

    public static void CollectData(){
        String s = "ABCD";
        for(int i = 0; i < 80;i++){
            Random random = new Random();
            int randomNumber = random.nextInt(4);
            data.add(s.charAt(randomNumber));
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值