Java实现数值逐行递减、每行奇数重复的数字金字塔问题排查
代码问题分析
- 外层循环判断条件逻辑错误:将循环上限
rows放在循环体内做自减操作,初始rows=5,循环跑3次后rows变成2,此时counter自增到4,4 <= 2不成立,循环直接终止,因此只能输出3行内容。 - 前置空格打印逻辑错误:空格计数的上限用了动态变化的
rows,导致每一行的前置空格数量不符合金字塔对齐要求。 - 没有保留初始总行数的固定值:后续行数判断、数字计算、空格计算都需要用到固定的初始总行数,直接修改原始
rows变量会导致所有关联逻辑全部偏移。
修改后的实现方案
单独定义固定的初始总行数变量,外层循环用固定总行数做判断,前置空格数按「初始总行数-当前行号」计算,当前打印数字按「初始总行数-当前行号+1」计算,修改后代码如下:
import java.util.Scanner; public class LoopExercise2 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); // 固定存储初始总行数,不要修改该值 int totalRows = 5; // counter为当前行号,从1遍历到固定总行数 for (int counter = 1; counter <= totalRows ; ++counter) { // 打印前置空格,数量为 总行数-当前行号 for (int space = 1; space <= totalRows - counter ; ++space ) { System.out.print(" "); } // 打印当前行数字,次数为 2*当前行号-1,数字为 总行数-当前行号+1 int currentNum = totalRows - counter + 1; int n_counter = 0; while (n_counter != 2 * counter - 1) { System.out.print(currentNum); ++n_counter; } // 换行 System.out.println(); } } }
运行后输出和预期完全一致:
5 444 33333 2222222 111111111
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

