2022年CCC J3竖琴调音题Java代码求助:输出不符合预期
解决CCC 2022 J3竖琴调音Java代码问题
原代码存在的核心问题
- 输入处理逻辑错误:将完整输入存为仅含一个元素的数组,未拆分独立调音指令,无法实现逐个指令处理。
- 字符串比较方式错误:Java中判断字符串相等需使用
equals()方法,而非==;且原代码中input[i]是完整输入字符串,不可能等于"+"或"-",这部分逻辑完全无效。 - 无关判断冗余:
num.contains(String.valueOf(input.length))无实际意义,input.length始终为1,和调音指令的拆分、处理没有关联。 - 未实现指令拆分逻辑:未识别每个调音指令的结构(大写字母段+符号+数字段),无法将连续输入拆分为独立的指令单元。
修正后的代码(符合简单语法要求)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String input = in.nextLine(); int index = 0; int length = input.length(); while (index < length) { // 收集音名(连续大写字母) StringBuilder note = new StringBuilder(); while (index < length && Character.isUpperCase(input.charAt(index))) { note.append(input.charAt(index)); index++; } // 获取调音符号(+/-) char sign = input.charAt(index); index++; // 收集调整数值(连续数字) StringBuilder number = new StringBuilder(); while (index < length && Character.isDigit(input.charAt(index))) { number.append(input.charAt(index)); index++; } // 输出对应格式内容 String action = sign == '+' ? "tighten" : "loosen"; System.out.println(note + " " + action + " " + number); } } }
代码逻辑说明
- 采用
while循环遍历输入字符串的每个字符,逐个拆分调音指令。 - 首先收集所有连续的大写字母,作为音名(如示例中的AFB、HC)。
- 读取紧随音名后的符号(+或-),通过三元运算符转换为对应的操作描述(tighten/loosen)。
- 收集符号后的连续数字,作为调整的数值。
- 按照题目要求的格式输出每条指令,自动完成换行。
内容的提问来源于stack exchange,提问作者The lol frog
相关产品推荐
相关产品推荐

