雕墙峻宇 2023-03-31 09:16 采纳率: 100%
浏览 28
已结题

java蓝桥杯 字符统计

测试用例没通过:

package imut.lanqiaobei.text01;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Map<Character, Integer> map = new HashMap<>();
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int length = s.length();
        for (int i = 0; i < length; i++) {
            if (map.containsKey(s.charAt(i))) {
                int val = map.get(s.charAt(i)) + 1;
                map.put(s.charAt(i), val);
            } else {
                map.put(s.charAt(i), 1);
            }
        }
        int max = 0;
        String result = "";
        for (int i = 'A'; i <= 'Z'; i++) {
            if (map.containsKey((char) i)) {
                if (max < map.get((char) i)) {
                    result = "" + (char) i;
                    max = map.get((char) i);
                }else if (max == map.get((char) i)) {
                    result += "" + (char) i;
                }
            }
        }
        System.out.println(result);
    }
}

感觉所以的情况都可以包涵,但是为什么最后显示答案错误?

  • 写回答

2条回答 默认 最新

  • 微软技术分享 全栈领域优质创作者 2023-03-31 09:20
    关注

    在代码开头,应该使用 import java.util.*; 导入 Map 和 Scanner 类。在读取字符串之前,应该使用 sc.nextLine() 将之前的输入缓冲区中的内容读取掉,否则会读到回车符,导致下一行代码直接结束。在计算字符出现次数的循环中,可以使用 map.merge() 方法代替 if-else 语句,简化代码。在遍历字母时,应该使用字母的 ASCII 码值 'A' 到 'Z',而不是直接使用字符。

    以下是修改后的代码:

    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Map<Character, Integer> map = new HashMap<>();
            Scanner sc = new Scanner(System.in);
            sc.nextLine();  // 读取之前的输入缓冲区中的内容
            String s = sc.nextLine();  // 读取字符串
            int length = s.length();
            for (int i = 0; i < length; i++) {
                char c = s.charAt(i);
                map.merge(c, 1, Integer::sum);  // 计算字符出现次数
            }
            int max = 0;
            String result = "";
            for (int i = 'A'; i <= 'Z'; i++) {
                char c = (char) i;
                if (map.containsKey(c)) {
                    int count = map.get(c);
                    if (count > max) {
                        result = String.valueOf(c);
                        max = count;
                    } else if (count == max) {
                        result += c;
                    }
                }
            }
            System.out.println(result);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭