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();

    }

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

 int num = 5;
 String letter = String.valueOf(((char)(((num - 1) % 26) + (int)'A')));
 System.out.println(letter);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值