Java字母反向转换程序重复字母不输出问题修复求助
修复字符串反向字母转换中重复字母不重复输出的问题
你的代码核心问题是逻辑错误:你现在是检查整个字符串里是否包含某个字母,只要存在就输出一次对应的反向字母,完全没处理每个字符的出现次数和输入顺序,所以重复字母只会输出一次,而且输出顺序是固定的A-Z顺序,不是输入的顺序。
修复思路
- 放弃逐个定义反向字母变量的冗余写法,利用ASCII码计算反向字母:对于任意大写字母
c,对应的反向字母可以通过公式(char) ('Z' - (c - 'A'))直接算出(比如A的ASCII是65,Z是90,90-(65-65)=90即Z,B是66,90-(66-65)=89即Y,以此类推)。 - 遍历输入字符串的每一个字符,逐个转换并输出,这样重复字符会被多次处理,输出顺序也和输入一致。
修改后的完整代码
import java.util.Scanner; public class App { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter the message you would like to see in reverse: "); String message = scanner.nextLine().toUpperCase(); // 遍历字符串的每个字符 for (int i = 0; i < message.length(); i++) { char c = message.charAt(i); // 只处理大写字母,非字母可以直接输出(如果需要的话) if (c >= 'A' && c <= 'Z') { char reversedChar = (char) ('Z' - (c - 'A')); System.out.print(reversedChar); } else { // 非字母字符直接输出,比如空格、数字等 System.out.print(c); } } scanner.close(); } }
额外优化点
- 原代码里
new String(message).contains("A")完全多余,直接用message.contains("A")就行,没必要重新创建字符串对象。 - 用单个字符遍历处理,既解决了重复字母的问题,又保证了输出顺序和输入一致,同时代码量大幅减少,可读性更高。
内容的提问来源于stack exchange,提问作者Smart Gamer
相关产品推荐
相关产品推荐

