Java编程需求:输入正整数n生成n个底朝下的n阶星号三角形
修正生成n个并排底朝下星号三角形的Java代码
问题需求
输入正整数n,生成n个并排的底朝下n阶星号三角形。例如输入3时,预期输出:
* * * ** ** ** *** *** ***
你的尝试代码
import java.util.Scanner; public class ex3 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("enter n"); int n = input.nextInt(); while (n <= 0) { System.out.println("error"); n = input.nextInt(); } for (int r = 1; r <= n; r++) { for (int c = 1; c <= n - r; c++) System.out.print(" "); for (int c = 1; c <= r; c++) System.out.print("*"); System.out.println(); } } }
问题分析
你的代码当前只生成了一个右对齐的底朝下三角形,但题目要求的是n个左对齐的底朝下三角形并排显示,且每个三角形之间的空格数随行号变化(行号r从1到n时,空格数为n - r)。
修正思路
- 保留外层行循环(
r从1到n),控制生成n行内容。 - 对每一行新增循环,生成n个并排的三角形片段:
- 每个片段先输出
r个星号(对应当前行的星号数量) - 若不是最后一个片段,输出
n - r个空格作为三角形间隔
- 每个片段先输出
- 移除原代码中星号前的空格输出循环,因为题目要求三角形左对齐。
修正后的代码
import java.util.Scanner; public class ex3 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("enter n"); int n = input.nextInt(); while (n <= 0) { System.out.println("error"); n = input.nextInt(); } // 控制行数,从1到n for (int r = 1; r <= n; r++) { // 生成n个并排的三角形片段 for (int k = 1; k <= n; k++) { // 输出当前行的r个星号 for (int c = 1; c <= r; c++) { System.out.print("*"); } // 非最后一个片段时输出间隔空格 if (k != n) { for (int c = 1; c <= n - r; c++) { System.out.print(" "); } } } // 每行结束换行 System.out.println(); } input.close(); // 关闭Scanner避免资源泄漏 } }
测试输入3时,输出与预期完全一致:
* * * ** ** ** *** *** ***
内容的提问来源于stack exchange,提问作者majd abo younis
相关产品推荐
相关产品推荐

