Java输出一个n行等腰三角形。

63 阅读1分钟

思路:输出一个n行等腰三角形。 

- 第一行:1个星 

- 第二行:3个星 

- 第三个: 5个星 

- 第n行:2n-1个星 

1. 外层循环就是n行, For (int i=1;i<=n;i++) 

2. 内层循环就是打内容,打2n-1个内容,要么是空格要么是星星,怎么判断哪些位置要打星星,如果只打3行,那么第三行,中间的位置就是n,最后一行是全部打星星,n的左边是n-1,n-2,n-3直到结果为1为止,那就是n-(n-1) n 右边的位置是n+(n-1),因为是对称的,那么设p=n-1,如果内层循环是j个内容 for (int j=1;j<=2n-1;j++),那么需要打星星的位置就是在n-p和n+p 之间,其他地方都打空格。

import java.util.Scanner;

public class IsoscelessTriangle {
    public static void main(String[] args) {
        Scanner line = new Scanner(System.in);
        System.out.print("你要输出几行的等腰三角形,输入行数即可");
        int n = line.nextInt();
        line.close();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= 2 * n - 1; j++) {
                int p = i - 1;
                if (j >= n - p && j <= n + p) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

 你的代码逻辑清晰,功能实现准确,整体没问题,但如果要说优化,给你几点前瞻性建议,帮你写得更简洁高效,也更易维护:

  1. 避免每次循环都计算 p = i - 1
    其实你每行的 p 是固定的,可以提前计算或者用更直接的表达式,减少冗余赋值。

  2. 内层循环的边界计算
    你用的 j >= n - p && j <= n + p 判断打印 *,本质是让星号区间以中心为基准,逐行扩展。
    可以先计算 left = n - p, right = n + p,在内层循环外面做,避免每次循环都计算。

  3. 变量命名更语义化
    line 用来接收 Scanner,命名上可以用 scanner,更直观。
    p 也可以用更有意义的名称,比如 offset

  4. 用户交互优化
    System.out.print("你要输出几行的等腰三角形,输入行数即可"),可以考虑换成 println,让输入更整洁。

  5. 代码扩展性考虑
    你写的是等腰三角形打印,如果以后想扩展成空心三角形、倒三角形、菱形等,建议拆成函数模块,方便复用。

“offset”在编程里一般指“偏移量”,就是相对于某个基准点的距离或差值。