You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java统计用户输入字符串最高频字符时数组越界如何解决

问题原因与修复方案

报错根本原因

你定义的freqLetter数组长度只有26,仅适配全小写字母的计算逻辑,超出这个范围的字符都会导致下标越界:

  • 大写字母ASCII码比对应小写字母小32,例如'E' - 'a' = 69 - 97 = -28,和你第一个报错的下标完全吻合
  • 空格、标点等非字母字符的ASCII码远小于'a'的97,计算出的下标都是负数,完全超出数组0~25的合法取值范围

修复方案

方案1:仅统计英文字母(大小写合并计算,忽略空格/标点)

这是最贴合你原有代码设计逻辑的方案,只需要修改统计循环的逻辑,增加大小写转换和合法字符校验即可:

import java.util.Scanner;

public class CharCount {
    static void maxOccuringChar(char str[]) {
        char maxChar = ' ';
        int freqLetter[] = new int[26];
        int lengthString = str.length;
        int maximum = -1;

        for (int i = 0; i < lengthString; i++) {
            // 先把当前字符转小写
            char cur = Character.toLowerCase(str[i]);
            // 只统计小写a-z范围内的字符,其他字符跳过
            if (cur >= 'a' && cur <= 'z') {
                freqLetter[cur - 'a']++;
            }
        }

        for (int i = 0; i < 26; i++) {
            if (maximum < freqLetter[i]) {
                maximum = freqLetter[i];
                maxChar = (char) (i + 'a');
            }
        }

        System.out.print(maxChar + " = " + maximum);
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] StringInput = in.nextLine().toCharArray();
        maxOccuringChar(StringInput);
        in.close();
    }
}

测试效果:

  • 输入Elephant,输出e = 2
  • 输入I am confused,输出m = 2
  • 输入hello,输出l = 2,和原有正常输出一致

方案2:统计所有ASCII字符(包括空格、标点、区分大小写)

如果需要统计输入内容里的所有字符,不需要过滤,直接把计数数组长度改为128覆盖所有ASCII字符即可,不需要做字符转换和过滤:

static void maxOccuringChar(char str[]) {
    char maxChar = ' ';
    int freq[] = new int[128]; // 覆盖所有ASCII可打印字符范围
    int lengthString = str.length;
    int maximum = -1;

    for (int i = 0; i < lengthString; i++) {
        freq[str[i]]++; // 直接用字符ASCII值当下标,不需要计算偏移
    }

    for (int i = 0; i < 128; i++) {
        if (maximum < freq[i]) {
            maximum = freq[i];
            maxChar = (char) i;
        }
    }

    System.out.print(maxChar + " = " + maximum);
}

内容的提问来源于stack exchange,提问作者Ralph Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 18:09:05