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); } }
修正点说明
- 逻辑与变量优化:明确标记中心行位置
midRow,统一使用无空格的-输出,避免总宽度超出M的限制;移除原始代码中冗余的j+=1循环步长错误。 - 中心行实现:计算
WELCOME左右的短横线填充量,确保文字严格居中,替换了原始代码中错误的短横线占位行。 - 对称性修复:上半部分从0到
midRow-1递增,下半部分从midRow-1倒序到0,保证图案上下对称;每行.|.的数量计算准确,确保总宽度符合3*N的要求。 - 字符输出规范:移除原始代码中
. | .的空格,统一使用.|.,保证图案元素的一致性和宽度准确性。
内容的提问来源于stack exchange,提问作者Arun KB
相关产品推荐
相关产品推荐

