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

Java摩尔斯电码转英文翻译器触发ArrayIndexOutOfBounds异常如何修复

问题根因
  • 最直接触发越界的原因:morsetoEnglish方法内层遍历摩尔斯编码数组的循环中,错误执行了i++而非j++,导致外层循环的索引i无限制累加,很快超出拆分后的输入数组长度,触发ArrayIndexOutOfBoundsException。
  • 拆分逻辑错误:split("|")的参数是正则语法,实际会按单个字符拆分输入内容,完全不符合摩尔斯电码按空格分隔单个编码单元的规则,即使索引问题修复也无法正常匹配编码。
  • 输入流残留问题:Scanner.nextInt()读取选项后不会消费输入末尾的换行符,后续BufferedReader.readLine()会直接读取到空字符串,导致无法正常获取用户输入的翻译内容。
  • 数组长度不匹配:english数组包含26个字母+10个数字共36个元素,而原morse数组仅定义了26个字母的编码+1个分隔符共27个元素,缺少数字对应的摩尔斯编码,后续匹配时也会出现索引不对应的问题。
修复方案

1. 修复输入流换行符残留问题

在nextInt()调用后新增一行消费残留的换行符,同时调整异常类型为更符合场景的IllegalArgumentException:

translatorChoice = input.nextInt();
input.nextLine(); // 新增代码,吃掉nextInt遗留的换行符
if (translatorChoice != 1 && translatorChoice !=2 ){
    throw new IllegalArgumentException("Please enter a valid number");
}

2. 补全摩尔斯编码数组,保证和英文字符数组一一对应

补全数字对应的摩尔斯编码,保证两个数组索引顺序完全匹配:

String[] morse = { ".-",   "-...", "-.-.", "-..",  ".",
        "..-.", "--.",  "....", "..",   ".---",
        "-.-",  ".-..", "--",   "-.",   "---",
        ".--.", "--.-", ".-.",  "...",  "-",
        "..-",  "...-", ".--",  "-..-", "-.--",
        "--..", ".----", "..---", "...--", "....-",
        ".....", "-....", "--...", "---..", "----.",
        "-----", "|" };

3. 重写摩尔斯转英文方法

修复索引自增错误、拆分逻辑错误,新增匹配后跳出逻辑提升效率:

public static void morsetoEnglish (char[] english, String userInput, String[] morse){
    // 按空格拆分单个摩尔斯编码,兼容多空格场景
    String[] input = userInput.split("\\s+");
    for (int i = 0; i < input.length; i++){
        // 内层循环改为j自增
        for (int j = 0; j < morse.length; j++){
            if (morse[j].equals(input[i])) {
                // 分隔符|对应输出空格,其余输出对应字符
                if (j == morse.length - 1) {
                    System.out.print(" ");
                } else {
                    System.out.print(english[j]);
                }
                break; // 匹配到结果后直接跳出内层循环,避免无效遍历
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:27:03