如何用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
相关产品推荐
相关产品推荐

