Java根据用户输入打印逐行增星等腰三角形的代码问题排查
问题根因
你现有代码输出正方形的核心原因是内层打印星号的循环终止条件写死为用户输入的边长值userSpecified,无论外层循环执行到第几行,每一行都会固定打印和边长数量相等的星号,自然无法实现逐行星号递增的效果。另外你代码里声明的triangleSide、width、height三个变量完全没有被使用,属于冗余代码,可以直接删掉。
修复逻辑
要实现逐行星号数递增1的效果,只需要遵循一个规则:第N行就打印N个星号。也就是说内层打印星号的循环次数,要和当前外层循环所在的行号绑定,而不是固定等于总边长。
我顺便把你原来写反的循环变量语义(原来外层变量叫col、内层变量叫row,和实际控制的行、列逻辑相反)做了修正,修正后的完整可运行代码如下:
package isoceles; import java.util.Scanner; public class Isoceles { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); int userSpecified; System.out.print("Enter the size of equal sides for isoceles triangle: "); userSpecified = stdIn.nextInt(); // 外层循环控制打印的行数 for (int row = 1; row <= userSpecified; row++) { // 内层循环控制当前行打印的星号数量:第row行打印row个星号 for (int col = 1; col <= row; col++) { System.out.print("*"); } // 单行打印完成后换行 System.out.println(); } stdIn.close(); } }
运行效果
当用户输入边长为4时,控制台输出和你预期完全一致:
* ** *** ****
补充说明:你当前给出的预期效果是左对齐的直角三角形,如果后续需要打印真正居中的等腰三角形(即星号整体居中,两侧补空格),只需要在外层循环里、打印星号之前,先打印
userSpecified - row个空格即可。
内容的提问来源于stack exchange,提问作者LexiStroon
相关产品推荐
相关产品推荐

