Java Pattern编程:输入值为4时字符图案输出与预期不符问题求解
Java字符图案打印问题排查
问题分析
原代码存在以下核心错误:
- 输出逻辑结构错误:错误拆分了
*、i的打印顺序,额外多打印了大量不必要的*字符 - 循环条件设置错误:打印
*、i的循环次数完全不符合图案要求,导致每行字符长度远大于预期的2n-1 - 结构逻辑偏差:没有按照每行的字符规则判断输出内容,多段冗余循环叠加导致输出混乱
修正思路
先明确图案规则(输入n,共打印n-1行,每行长度为2n-1):
- 每行开头和结尾打印
n - 当前行号个字符b - 第1行:中间仅打印1个
*,无i - 第2行及以后:左右各打印1个
*,两个*中间打印2*(当前行号-1)-1个字符i
修正后代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); // 一共输出n-1行,匹配预期输出规则 for (int row = 1; row <= n - 1; row++) { // 打印左侧b for (int j = 1; j <= n - row; j++) { System.out.print("b"); } // 打印中间内容 System.out.print("*"); if (row >= 2) { // 打印中间的i,数量为2row-3 for (int k = 1; k <= 2 * row - 3; k++) { System.out.print("i"); } System.out.print("*"); } // 打印右侧b for (int j = 1; j <= n - row; j++) { System.out.print("b"); } System.out.println(); } } }
运行验证
输入4时,输出结果和预期完全一致:
bbb*bbb bb*i*bb b*iii*b
内容的提问来源于stack exchange,提问作者Rizwana Syed
相关产品推荐
相关产品推荐

