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

如何用Java for循环与静态方法横向打印5只无错位的鸭子?

横向打印5只鸭子的代码修正问题

问题说明

需要仅使用for循环和静态方法横向打印5只鸭子,现有代码运行后鸭子出现错位,期望的正确输出样式如下:

____           
           __|____|__         
          |__________|       
           ((      ))
          ((     O  ```)
          ((        ``) 
           \     x``
    (())    \     X
   ((  ))~~~~      ))
 ((                 ))
((      ~~~~~~       ))   
((     ~~~~~~~~      ))
 \     ~~~~~~      //
  --__--__--__--__--__
 --__--__--__--__--__

原代码

public static void main(String[] args) {
       int numDucks = 5;
       printHat(numDucks);
       printBody(numDucks);
       printWater(numDucks);
   }

public static void printHat(int numDucks) {
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("               ____       ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("            __|____|__    ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("           |__________|   ");
    }
    System.out.println();
}

public static void printBody(int numDucks) {
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("            ((      ))   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("           ((     O  ```)\"");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("           ((        ``)   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("            \\     x``   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("     (())    \\     X   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("    ((  ))~~~~      ))   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("  ((                 ))   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print(" ((      ~~~~~~       ))   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print(" ((     ~~~~~~~~      ))   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("  \\     ~~~~~~      //   ");
    }
    System.out.println();
}

public static void printWater(int numDucks) {
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("   --__--__--__--__--__   ");
    }
    System.out.println();
    for (int i = 1; i <= numDucks; i++) {
        System.out.print("  --__--__--__--__--__   ");
    }
    System.out.println();
    }
  }

问题原因

鸭子错位的核心原因是每一行的鸭子图案字符串长度不一致。比如帽子部分的三行字符串、身体部分的每行字符串宽度都不一样,横向循环打印时,前一只鸭子的图案长度会影响下一只的起始位置,导致整体对齐混乱。

修正后的代码

要解决这个问题,只需把每一只鸭子对应行的图案字符串调整为相同宽度,确保每行的鸭子图案长度一致。以下是修正后的代码:

public class DuckPrinter {
    public static void main(String[] args) {
        int numDucks = 5;
        printHat(numDucks);
        printBody(numDucks);
        printWater(numDucks);
    }

    public static void printHat(int numDucks) {
        // 统一每行鸭子图案宽度,确保对齐
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("              ____        ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("           __|____|__     ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("          |__________|    ");
        }
        System.out.println();
    }

    public static void printBody(int numDucks) {
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("           ((      ))     ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("          ((     O  ```)  ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("          ((        ``)   ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("           \\     x``      ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("    (())    \\     X       ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("   ((  ))~~~~      ))     ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("  ((                 ))   ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print(" ((      ~~~~~~       ))  ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print(" ((     ~~~~~~~~      ))  ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("  \\     ~~~~~~      //    ");
        }
        System.out.println();
    }

    public static void printWater(int numDucks) {
        for (int i = 1; i <= numDucks; i++) {
            System.out.print("  --__--__--__--__--__    ");
        }
        System.out.println();
        for (int i = 1; i <= numDucks; i++) {
            System.out.print(" --__--__--__--__--__     ");
        }
        System.out.println();
    }
}

说明

修正时统一了每一行鸭子图案的字符串长度,确保每只鸭子的对应行宽度完全一致。这样横向循环打印时,每一行的鸭子就能精准对齐,不会出现错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:24:58