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

基于锯齿数组打印Happy图案:代码输出不符预期求助

问题排查:锯齿数组绘制Happy图案失败

给定用于标记每行*位置的锯齿数组,你的代码无法输出预期的Happy图案,核心问题有三个:

  • 遗漏首行首位置的*:原代码从第二个元素开始处理空格后才输出*,直接跳过了第一个标记位(0)。
  • 遗漏每行末尾的*:内层循环j < arr[i].length - 1的条件,导致每行最后一个标记元素被排除,没输出对应的*。
  • 空格逻辑有漏洞:仅处理两个*之间的空格,虽然首位置是0没暴露问题,但如果首位置不是0,行首到第一个*的空格会完全缺失。

修正后的代码

int arr[][] = {{0,4,8,12,13,14,15,18,19,20,21,24,28},
               {0,4,7,9,12,16,18,22,25,27},
               {0,1,2,3,4,6,10,12,16,18,22,26},
               {0,4,6,10,12,13,14,15,18,19,20,21,26},
               {0,4,6,7,8,9,10,12,18,26},
               {0,4,6,10,12,18,26}};

// 计算最大列号,确保所有行输出长度一致,图案不会错位
int maxColumn = 0;
for (int[] row : arr) {
    int lastPos = row[row.length - 1];
    if (lastPos > maxColumn) {
        maxColumn = lastPos;
    }
}

for (int i = 0; i < arr.length; i++) {
    int markerIndex = 0;
    // 逐列遍历到最大列号,逐个位置判断是否输出*
    for (int col = 0; col <= maxColumn; col++) {
        if (markerIndex < arr[i].length && col == arr[i][markerIndex]) {
            System.out.print("*");
            markerIndex++;
        } else {
            System.out.print(" ");
        }
    }
    System.out.println();
}

修正思路说明

  1. 先获取所有标记中的最大列号,保证每行输出的字符数相同,避免图案各行长度不一导致错位。
  2. 逐列遍历每行的每个位置,直接判断当前列是否是该行需要标记的位置:
    • 匹配则输出*,同时移动标记数组的指针到下一个待匹配位置。
    • 不匹配则输出空格。
  3. 这种逻辑完全覆盖了所有标记位置,不管是行首、中间还是行尾的*都能准确输出,也能正确填充所有需要的空格。

内容的提问来源于stack exchange,提问作者JASON REINFRED REYES

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:50:32