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

Java实现N×M规格带WELCOME字样的图案打印请求协助

问题需求

需要实现一个N×M规格的图案打印程序,满足以下要求:

  • N为5到101之间的奇数自然数,M等于3倍的N
  • 图案中心需显示“WELCOME”字样
  • 仅允许使用|、.、-三种字符

用户原始代码

class DimondText{
 
 
 
   static void createPattern(int n, int m){
         int c=m/2;
          for(int i=1;i<n;i++){
            if(i%2!=0 || i==1){
              for(int j=i;j<=c;j++){
                  System.out.print("- ");
 
             }
             for(int j=1;j<=i;j++){
                 System.out.print(". | .");
                 j+=1;
             }
             for(int j=1;j<i;j++){
                 System.out.print(". | .");                                                                                                            
                 j+=1;
             }
             for(int j=i;j<=c;j++){
                 System.out.print("- ");
             }
              System.out.print("\n");
         }
       }
     for(int i=0;i<n;i++){                    
      System.out.print("- ");
         }
     System.out.print("\n");

     for(int i=1;i<=n;i++){
       if(i%2!=0){
        for(int j=1;j<=n-i;j++){
            System.out.print("- ");
         }
         for(int j=i;j<c-i;j++){
            System.out.print(". | .");
            j+=1;
         }
        for(int j=i;j<c-i;j++){
            System.out.print(". | .");
            j+=1;
        }
         for(int j=1;j<=n-i;j++){
             System.out.print("- ");
         }
         System.out.print("\n");       }
    }

   }

     public static void main(String[]arg){

         createPattern(7,21);
     }
 }

修正后的代码

class DiamondText {
    static void createPattern(int n, int m) {
        int midRow = n / 2;
        int halfWidth = m / 2;

        // 打印上半部分(不含中心行)
        for (int i = 0; i < midRow; i++) {
            // 左侧短横线填充
            for (int j = 0; j < halfWidth - 3 * i; j++) {
                System.out.print("-");
            }
            // 中间对称的 .|. 图案
            for (int j = 0; j < i; j++) {
                System.out.print(".|.");
            }
            System.out.print(".|.");
            for (int j = 0; j < i; j++) {
                System.out.print(".|.");
            }
            // 右侧短横线填充
            for (int j = 0; j < halfWidth - 3 * i; j++) {
                System.out.print("-");
            }
            System.out.println();
        }

        // 打印中心WELCOME行
        int welcomePadding = (m - 7) / 2;
        for (int j = 0; j < welcomePadding; j++) {
            System.out.print("-");
        }
        System.out.print("WELCOME");
        for (int j = 0; j < welcomePadding; j++) {
            System.out.print("-");
        }
        System.out.println();

        // 打印下半部分
        for (int i = midRow - 1; i >= 0; i--) {
            // 左侧短横线填充
            for (int j = 0; j < halfWidth - 3 * i; j++) {
                System.out.print("-");
            }
            // 中间对称的 .|. 图案
            for (int j = 0; j < i; j++) {
                System.out.print(".|.");
            }
            System.out.print(".|.");
            for (int j = 0; j < i; j++) {
                System.out.print(".|.");
            }
            // 右侧短横线填充
            for (int j = 0; j < halfWidth - 3 * i; j++) {
                System.out.print("-");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        createPattern(7, 21);
    }
}

修正点说明

  1. 逻辑与变量优化:明确标记中心行位置midRow,统一使用无空格的-输出,避免总宽度超出M的限制;移除原始代码中冗余的j+=1循环步长错误。
  2. 中心行实现:计算WELCOME左右的短横线填充量,确保文字严格居中,替换了原始代码中错误的短横线占位行。
  3. 对称性修复:上半部分从0到midRow-1递增,下半部分从midRow-1倒序到0,保证图案上下对称;每行.|.的数量计算准确,确保总宽度符合3*N的要求。
  4. 字符输出规范:移除原始代码中. | .的空格,统一使用.|.,保证图案元素的一致性和宽度准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:01:03