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
相关产品推荐
相关产品推荐

