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

ACM库摩尔斯电码转换程序空格后内容无法输出求助

嘿,我看到你的问题了——输入带空格的字符串时,空格后面的内容就“消失”了对吧?让我帮你找找问题在哪~

问题根源:变量j的更新逻辑遗漏

你代码里的核心bug出在处理空格的分支里没有递增j。看这段关键代码:

if(Character.toString(word.charAt(j)).equals(" ")){
 println();
 // 这里没有让j往后走一步!
}else {
 // ... 处理字母的逻辑,这里有j +=1
}

当遇到空格时,你只输出了换行,但j的值保持不变,后续循环会一直盯着这个空格字符反复处理,空格后面的字符永远没机会被访问到,自然就输出不了啦。

快速修复方案:补上空格分支的j递增

只需要在处理空格的代码块里加上j += 1,让指针移动到下一个字符就行:

if(Character.toString(word.charAt(j)).equals(" ")){
 println();
 j += 1; // 加上这行,问题立刻解决!
}else {
 // ... 原有的字母处理逻辑
}
额外优化建议(可选)

为了让代码更简洁高效,还有几个小改进方向:

  • 不用把char转成String来比较空格,直接用word.charAt(j) == ' '更简洁高效
  • 用HashMap存储字母和摩尔斯码的映射,代替遍历数组查找,速度更快、逻辑更清晰
  • 可以直接用j遍历整个字符串,去掉冗余的i变量

这里是优化后的完整代码:

import acm.program.*;
import java.util.HashMap;

public class Morse extends Program {
    public void run() {
        // 用HashMap存储字母与摩尔斯码的映射,查找更高效
        HashMap<Character, String> morseMap = new HashMap<>();
        morseMap.put('A', ".-");
        morseMap.put('B', "-...");
        morseMap.put('C', "-.-.");
        morseMap.put('D', "-..");
        morseMap.put('E', ".");
        morseMap.put('F', "..-.");
        morseMap.put('G', "--.");
        morseMap.put('H', "....");
        morseMap.put('I', "..");
        morseMap.put('J', ".---");
        morseMap.put('K', "-.-");
        morseMap.put('L', ".-..");
        morseMap.put('M', "--");
        morseMap.put('N', "-.");
        morseMap.put('O', "---");
        morseMap.put('P', ".--.");
        morseMap.put('Q', "--.-");
        morseMap.put('R', ".-.");
        morseMap.put('S', "...");
        morseMap.put('T', "-");
        morseMap.put('U', "..-");
        morseMap.put('V', "...-");
        morseMap.put('W', ".--");
        morseMap.put('X', "-..-");
        morseMap.put('Y', "-.--");
        morseMap.put('Z', "--..");

        String input = readLine("Give the word(s) to transcribe: ").toUpperCase();
        println("Morse: ");

        for (int j = 0; j < input.length(); j++) {
            char c = input.charAt(j);
            if (c == ' ') {
                println();
            } else {
                String code = morseMap.get(c);
                if (code != null) {
                    print(code + " ");
                } else {
                    println("\nLetter '" + c + "' was not found.");
                }
            }
        }
    }
}

这个版本不仅修复了空格的问题,还让代码逻辑更清晰,运行效率也更高~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:07:48