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

ASCII艺术文本处理程序故障排查:始终输出字符'A'

问题分析与修复:ASCII艺术文本程序始终输出"A"样式

问题根源

你的程序不管输入什么字符都输出"A"的ASCII样式,核心问题是没有根据目标字符计算其在ASCII样式中的对应位置,始终取了每一行的前L个字符(也就是"A"的固定区域)。

具体错误点

看这段关键代码:

char c = (letterIndex < wordLength) ? T.charAt(letterIndex) : ' '; 
int index = j % L; // Hint in ASCII style line
printedLine.append(lines[i].charAt(index));

你拿到目标字符c后完全没用到它来定位样式位置,index = j%L只会取0到L-1的范围,也就是每一行的开头L个字符——正好对应"A"的ASCII样式区域,所以不管输入什么,输出都是A的样式。

修复方案

要解决这个问题,需要:

  1. 将目标字符c转换为对应样式索引:大写字母A对应0,B对应1,…,Z对应25;小写字母可以转成大写,非字母字符可默认用A(或按题目要求调整)。
  2. 计算字符在样式行中的起始偏移量:charOffset = 字符索引 * L(每个字母占L个字符宽度)。
  3. 用charOffset + index作为最终索引,从样式行中取对应字符。

修复后的完整代码

import java.util.*;

class Solution {

    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);

        // 读取ASCII样式的宽度
        int L = in.nextInt();

        // 读取ASCII样式的高度
        int H = in.nextInt();
        in.nextLine(); // 读取换行符

        // 读取要显示的单词,统一转大写兼容小写输入
        String T = in.nextLine().toUpperCase();

        // 读取ASCII样式
        StringBuilder styleBuilder = new StringBuilder();
        for (int i = 0; i < H; i++) {
            String ROW = in.nextLine();
            styleBuilder.append(ROW).append("\n");
        }
        String style = styleBuilder.toString();

        // 生成并输出结果
        String[] lines = style.split("\n");
        int lineCount = lines.length;
        int wordLength = T.length();
        
        for (int i = 0; i < lineCount; i++) {
            StringBuilder printedLine = new StringBuilder();
            for (int j = 0; j < wordLength; j++) {
                char c = T.charAt(j);
                // 计算字符对应的索引:A-Z对应0-25,非字母默认用A(索引0)
                int charIndex = (c >= 'A' && c <= 'Z') ? (c - 'A') : 0;
                int charOffset = charIndex * L;
                // 直接截取当前字符在该行的L长度片段
                printedLine.append(lines[i].substring(charOffset, charOffset + L));
            }
            System.out.println(printedLine);
        }
    }
}

额外优化说明

  • 加入toUpperCase()统一处理输入的小写字母,避免大小写不匹配问题。
  • 用substring直接截取字符对应的L长度片段,比逐个字符拼接更简洁高效。
  • 非字母字符默认用A的样式,可根据题目要求修改(比如样式包含?的话,将charIndex设为26即可)。

内容的提问来源于stack exchange,提问作者Fapou9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:53:16