本文目录导读:

直接回答
对于学习和面试场景,这种案例是认可的,原因如下:
- 经典性:这是几乎所有Java教材和培训中都会有的入门例题,属于“必会”级别。
- 考察逻辑:它确实能考察你对循环嵌套(外层控制行数,内层控制空格和星号)、变量边界和数学推导的理解。
- 基础扎实:能不看答案手写出来,说明你具备了最基础的编程思维。
但如果你是在问“这个案例本身是否有实际工程价值”,坦白说,价值有限。 它只是一个纯粹的语法练兵,不涉及面向对象、算法优化或真实业务逻辑。
正面案例(标准写法)
这是最典型的倒三角(星号递减、左对齐):
public class InvertedTriangle {
public static void main(String[] args) {
int rows = 5; // 行数
for (int i = rows; i >= 1; i--) {
// 内层循环:打印星号
for (int j = 1; j <= i; j++) {
System.out.print("* ");
}
// 换行
System.out.println();
}
}
}
输出:
分析:
- 外层
i从5到1,控制行数。 - 内层
j从1到i,控制每行星号个数,正好递减。
更常见的“居中”倒三角(带空格)
这个案例稍微复杂一点,是面试中更常见的难点:
public class CenteredInvertedTriangle {
public static void main(String[] args) {
int rows = 5;
for (int i = rows; i >= 1; i--) {
// 打印空格(规律:每行递增)
for (int j = 0; j < rows - i; j++) {
System.out.print(" ");
}
// 打印星号(规律:2*i - 1)
for (int k = 0; k < (2 * i - 1); k++) {
System.out.print("* ");
}
System.out.println();
}
}
}
输出:
分析:
- 这里需要推导两个公式:空格数 = rows - i,*星号数 = 2i - 1**。
- 这就是俗称的“倒三角回敲”(因为打印完星号需要回车换行)。
这个案例的不足(为什么说工程价值有限)
- 硬编码:通常写成
int rows = 5,没有从控制台或方法参数读取,不够灵活。 - 没有封装:逻辑直接写在
main里,没有拆分成方法(如printTriangle(int rows))。 - 不涉及真实业务:实际开发中,类似图案常用前端CSS或Canvas实现,后端Java很少直接打印控制台图形。
如果我是面试官,我会怎么看?
- 认可:如果你能流畅地写出上面的居中倒三角,且能清晰解释
2*i-1和rows-i怎么推导的,我会认为你基础过关。 - 加分:如果你能顺手改成
printTriangle(rows)方法,并考虑rows <= 0时的异常处理,甚至用递归实现(递归确实能写,但效率低),那说明你有可维护性意识。
| 维度 | |
|---|---|
| 学习价值 | 高(锻炼循环、边界) |
| 面试价值 | 中高(基础必考) |
| 工程价值 | 低(纯语法演示) |
| 是否认可 | 认可,但建议展示时补充“优化版”(方法封装 + 参数化) |
建议:如果你在作业或面试中展示,最好加上这样的注释和优化:
/**
* 打印居中的倒三角图案
* @param rows 行数(必须大于0)
*/
public static void printCenteredTriangle(int rows) {
if (rows <= 0) {
throw new IllegalArgumentException("行数必须大于0");
}
// ... 循环体同上
}
这样既保留了“倒三角回敲”的核心逻辑,又体现了专业素养。