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

无法解析特定图案生成逻辑,寻求Java图案打印代码指导

解析目标图案逻辑并修正Java代码

首先,我们先明确你给出的目标图案(以N=4为例)的结构,把空白替换为要求的'-'后,完整图案应该是:

---/
--/-
-/-/\
-/--\
\--/
\-/-
-/-\
\/

(注:每行长度匹配外臂N个'-'的要求,左右两侧的'-'总数为N)

你的现有代码只处理了单斜线的生成逻辑,但目标图案从第3行开始出现双斜线,且斜线位置有展开和收起的对称规律,我们可以把整个图案分成4个阶段来实现:

阶段1:上半部分单斜线(行0 ~ 行1)

这两行只有一个/,位置逐行左移:

  • 行号i(从0开始),/的列位置为 N-1 - i
  • 其他位置填充'-'

阶段2:上半部分双斜线展开(行2 ~ 行N-1)

这两行出现两个/和一个\,规律是:

  • 第一个/的列位置:N-1 - (i-1) → 保持和阶段1的最后一行左移位置一致
  • 第二个/的列位置:第一个/的位置 +1
  • \的列位置:N-1 + (i-1) → 逐行右移,实现展开效果
  • 其他位置填充'-'

阶段3:下半部分双斜线收起(行N ~ 行N+1)

这两行是阶段2的对称镜像,用\代替/,/代替\:

  • 第一个\的列位置:(i - N) +1 → 逐行右移
  • 第二个\的列位置:第一个\的位置 +1
  • /的列位置:2*N -1 - (i - N) → 逐行左移,对应阶段2的\位置
  • 其他位置填充'-'

阶段4:下半部分单斜线收起(行N+2 ~ 行2N-1)

这两行是阶段1的对称镜像,用\和/组合:

  • \的列位置:(i - N) +1 → 逐行右移
  • /的列位置:\的位置 +1
  • 其他位置填充'-'

修正后的Java代码

import java.util.Scanner;

public class PatternPrinter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入数字N:");
        int N = scanner.nextInt();
        int totalRows = 2 * N;
        
        for (int i = 0; i < totalRows; i++) {
            // 初始化当前行的字符数组,默认填充'-'
            char[] row = new char[2 * N];
            for (int j = 0; j < 2 * N; j++) {
                row[j] = '-';
            }
            
            if (i < 2) {
                // 阶段1:上半部分单斜线
                int slashCol = N - 1 - i;
                row[slashCol] = '/';
            } else if (i < N) {
                // 阶段2:上半部分双斜线展开
                int firstSlashCol = N - 1 - (i - 1);
                int secondSlashCol = firstSlashCol + 1;
                int backslashCol = N - 1 + (i - 1);
                row[firstSlashCol] = '/';
                row[secondSlashCol] = '/';
                row[backslashCol] = '\\';
            } else if (i < N + 2) {
                // 阶段3:下半部分双斜线收起
                int offset = i - N;
                int firstBackslashCol = offset + 1;
                int secondBackslashCol = firstBackslashCol + 1;
                int slashCol = 2 * N - 1 - offset;
                row[firstBackslashCol] = '\\';
                row[secondBackslashCol] = '\\';
                row[slashCol] = '/';
            } else {
                // 阶段4:下半部分单斜线收起
                int offset = i - N;
                int backslashCol = offset + 1;
                int slashCol = backslashCol + 1;
                row[backslashCol] = '\\';
                row[slashCol] = '/';
            }
            
            // 打印当前行,trim匹配你给出的图案无末尾'-'的效果,保留所有'-'可去掉trim()
            System.out.println(new String(row).trim());
        }
        scanner.close();
    }
}

代码说明

  1. 我们用字符数组构建每行,先默认填充'-'再替换对应位置的斜线,逻辑更清晰易维护。
  2. 每个阶段的位置计算都基于行号i和输入N的关系,保证图案的对称性和展开/收起的动态效果。
  3. 若需要严格保留所有外臂的'-'(不删除末尾空白),直接去掉trim()方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:28:51