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

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);
        }
    }
}

代码逻辑说明

  1. 采用while循环遍历输入字符串的每个字符,逐个拆分调音指令。
  2. 首先收集所有连续的大写字母,作为音名(如示例中的AFB、HC)。
  3. 读取紧随音名后的符号(+或-),通过三元运算符转换为对应的操作描述(tighten/loosen)。
  4. 收集符号后的连续数字,作为调整的数值。
  5. 按照题目要求的格式输出每条指令,自动完成换行。

内容的提问来源于stack exchange,提问作者The lol frog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:56:03