MOOC《Java: Advanced Astrology》右倾三角形打印功能调试求助
问题分析与解决方案
你遇到的问题核心出在printTriangle方法的逻辑上,主要有两个关键问题:
- 冗余分支与循环起始错误:单独处理
size == 1的情况完全没必要,而且循环从i=0开始会导致第一次循环输出空行(printStars(0)不会打印星号,只会输出size个空格加换行),这直接导致了测试不通过。 - 空格数量计算偏差:右倾三角形(右对齐样式)的每行空格数应该是
size - 当前行数,而你初始将空格数设为size,导致每行空格数多了1个,或者出现多余空行。
修正后的printTriangle方法
public static void printTriangle(int size) { int i = 1; int spaces = size - 1; // 第一行的空格数为size-1,对应右对齐的起始位置 while (i <= size) { printSpaces(spaces); printStars(i); spaces--; // 每行空格数递减 i++; // 每行星号数递增 } }
逻辑解释
- 去掉了冗余的
size == 1分支,通用逻辑可以完美处理所有尺寸的输入(包括size=1)。 - 循环从
i=1开始,对应第一行1个星号,空格数初始为size-1(比如size=3时,第一行输出2个空格+1个星号,符合右倾三角形的视觉要求)。 - 每循环一次,空格数减1、星号数加1,最终生成正确的右对齐三角形:
* ** ***
如果你题目中的“右倾三角形”是指每行向右缩进的样式(如下):
* ** ***
只需调整空格数的计算逻辑,将初始空格数设为0,每行递增1:
public static void printTriangle(int size) { int i = 1; int spaces = 0; while (i <= size) { printSpaces(spaces); printStars(i); spaces++; i++; } }
根据你提供的错误信息,修正第一种右对齐样式的代码后就能通过所有测试了。
内容的提问来源于stack exchange,提问作者malik kemp
相关产品推荐
相关产品推荐

