• Java编程简便技巧篇(二)——字母和数字之间的转换


    例题:

    这里是引用
    题目:请设计一个计票器程序,通过输入有效候选人列表和投票结果,计算出1.每个有效候选人的票数;2.无效票数;3.获得票数最多的人。
    注意:如果候选人的票数相同,则通过候选人列表中候选人的顺序决定谁胜出。如果票数中的无效票多于最高票候选人的票数或者票数为空,则无人获胜。

    例1
    Input:
    Valid Candidates Name [“A”,“B”,“C”]
    Vote Casted[“A”,“F”,“A”,“B”,“A”,“B”,“A”,“C”,“E”]
    Output:
    A=4 B=2 C=1 incalidVotes=2 Winner = A
    例2:
    Input:
    Valid Candidates Name[“A”,“C”,“B”]
    Vote Casted[“A”,“F”,“B”,“B”,“B”,“C”,“C”,“C”,“E”]
    Output:
    A=1 B=3 C=3 invalidVotes=2 Winner = C
    (B、C票数相同,但是候选人列表中C的位置靠前,所以C获胜
    例3:
    Input:
    Valid Candidates Name[“A”,“C”,“B”]
    Vote Casted[“R”,“F”,“G”,“B”,“B”,“K”,“L”,“C”,“E”]
    Output:
    A=0 C=1 B=2 invalidVotes=6 Winner = N/A
    例4:
    Input:
    Valid Candidates Name[“A”,“C”,“B”]
    Vote Casted[]
    Output:
    A=0 C=0 B=0 invalidVotes=0 Winner = N/A

    代码

    public static String countVotes(List<String> validCandidates, List<String> voteCasted){
    
    
            int invalid = 0;
            HashMap<Integer, Integer> map = new HashMap<>();
    
            for (int i = 0; i < voteCasted.size(); i++) {
                int toNum = voteCasted.get(i).toCharArray()[0] - 'A' + 1;
                if (toNum > (validCandidates.size() + 1)){
                    invalid++;
                    continue;
                }else {
                    map.put(toNum, map.getOrDefault(toNum, 0) + 1);
                }
            }
    
            StringBuilder sb = new StringBuilder();
            int max = 0 ;
            String winner = new String();
            //找到最大的
            for (int i = 0; i < validCandidates.size(); i++) {
                if (map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1)!= null && map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1) > max){
                    max = map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1);
                    winner = validCandidates.get(i);
                }
                sb.append(validCandidates.get(i));
                sb.append("=");
                if (map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1) != null){
                    sb.append(map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1));
                }else {
                    sb.append(0);
                }
                sb.append(" ");
            }
            Collections.sort(validCandidates);
            sb.append("invalidVotes=");
            sb.append(String.valueOf(invalid));
            sb.append(" Winner=");
            if (max > 0 && max > invalid){
                sb.append(winner);
            }else {
                sb.append("N/A");
            }
            return sb.toString();
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    其中的x.toCharArray()[0] - 'A' + 1即是把字母x对应的数字
    把数字转为字母的的方法如下

     int num = 5;
     String letter = String.valueOf(((char)(((num - 1) % 26) + (int)'A')));
     System.out.println(letter);
    
    • 1
    • 2
    • 3
  • 相关阅读:
    trivy 获取基础镜像源码分析
    基于51单片机交通灯带紧急开关+黄灯倒计时+可调时间
    JVM学习目录
    点击化学 PEG 试剂:1802907-92-1,Mtz-PEG4-NHS,甲基四嗪-四聚乙醇-活性酯
    基于双目视觉的三维重建C++实战
    投资理财:买理财亏损不保本怎么办?
    make menuconfig配置方法
    【计算机网络】VRRP协议理论和配置
    Kubuesphere部署Ruoyi(二):部署kubesphere
    glTexImage2D
  • 原文地址:https://blog.csdn.net/bruce_zhao1407/article/details/126430509