Java大小写切换程序开发问题:输入CAPS切换字符大小写
问题:Java大小写切换程序无输出问题解决
需求说明
需要开发一个Java程序,功能如下:
- 先接收一个整数,代表后续要输入的字符或指令总数(包含CAPS指令)
- 初始默认字符为小写
- 每次输入CAPS指令后,后续输入的字符切换大小写
- 最终输出处理后的字符串
示例:
输入:8、s、f、k、CAPS、h、j、CAPS、p
输出:sfkHJp
用户尝试代码
import java.util.Scanner; public class Main { public static void main(String[] args) { int CAPScounter = 0; String result = ""; String temp = ""; String singles = ""; boolean CAPSval = false; if (CAPSval) { singles = "CAPS"; } Scanner input = new Scanner(System.in); int n = input.nextInt(); // System.out.print(n); while (true) { if (result.length() == n - CAPScounter) { break; } //temp += input.next(); singles = input.next(); if (CAPSval) { CAPScounter += 1; result += temp; temp = ""; } } System.out.print(result); } }
问题分析
你的代码存在几个核心问题导致无输出:
- 循环终止逻辑错误:
result.length() == n - CAPScounter条件永远无法触发,因为result和CAPScounter的更新逻辑完全混乱,无法达到终止条件 - CAPS指令判断缺失:没有检查输入内容是否为"CAPS",无法触发大小写切换逻辑
- 字符处理逻辑无效:没有根据大小写状态对输入字符进行转换,也没有正确将字符追加到结果中
- 冗余无效代码:初始的
if (CAPSval)块完全无效,因为CAPSval初始为false,这段代码不会执行
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 获取输入总数 int total = input.nextInt(); // 大小写状态标记,初始为小写模式 boolean isUpperCase = false; StringBuilder result = new StringBuilder(); // 循环读取指定次数的输入 for (int i = 0; i < total; i++) { String inputStr = input.next(); if ("CAPS".equals(inputStr)) { // 切换大小写状态 isUpperCase = !isUpperCase; } else { // 根据当前状态转换字符并追加到结果 if (isUpperCase) { result.append(inputStr.toUpperCase()); } else { result.append(inputStr.toLowerCase()); } } } // 输出最终结果 System.out.println(result.toString()); input.close(); } }
修正说明
- 使用
StringBuilder替代字符串拼接,提升效率 - 用
for循环直接控制读取次数,逻辑更清晰,避免无限循环问题 - 增加CAPS指令判断,正确切换大小写状态
- 对每个输入字符,根据当前状态完成大小写转换后追加到结果
- 最后关闭Scanner资源,避免资源泄漏
内容的提问来源于stack exchange,提问作者Phantom
相关产品推荐
相关产品推荐

