上一篇
Java中,可通过嵌套循环实现倒三角,外层控行数,内层分两部分处理空格与符号打印
Java编程中,打印倒三角形是一种经典的练习,主要用于掌握循环结构和逻辑控制,以下是详细的实现步骤、代码示例及扩展思路:
核心原理
倒三角的本质是通过逐行减少符号(如)的数量形成视觉上的反向扩展效果,通常采用双层嵌套循环结构:
- 外层循环:控制总行数和当前处理的行号;
- 内层循环:分为两部分,分别负责打印空格与符号,确保每行的起始位置正确且符号数量递减。
基础版(仅用星号)
public class InvertedTriangle {
public static void main(String[] args) {
int rows = 5; // 定义倒三角的高度(行数)
for (int i = 0; i < rows; i++) { // 外层循环控制行数
for (int j = 0; j <= i; j++) { // 内层循环打印空格(随行数增加而增多)
System.out.print(" ");
}
for (int k = rows i; k > 0; k--) { // 内层循环打印星号(数量逐行减少)
System.out.print("");
}
System.out.println(); // 换行进入下一行
}
}
}
执行结果示例(当rows=5时):
关键点解析
- 空格的作用:首层内循环通过累加空格实现右对齐效果,例如第一行无空格,第二行1个空格……以此形成阶梯状收缩;
- 星号递减公式:每行星号数量=总行数−当前行索引(从0开始计数),即
rows i; - 边界处理:注意内层第二个循环的条件应为
k > 0而非k >= 0,避免多打印一个多余字符。
通用化改进(支持动态输入)
若希望用户自定义行数,可结合Scanner类实现交互式输入:
import java.util.Scanner;
public class CustomInvertedTriangle {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入倒三角的行数:");
int n = scanner.nextInt();
printTriangle(n);
}
// 抽取独立方法提高复用性
private static void printTriangle(int numRows) {
for (int i = 0; i < numRows; i++) {
// 打印左侧填充空格
for (int space = 0; space < i; space++) {
System.out.print(" ");
}
// 打印有效符号部分
for (int star = numRows i; star > 0; star--) {
System.out.print("");
}
System.out.println();
}
}
}
此版本的优势在于解耦逻辑与数据,使代码更易维护,例如将绘图功能封装为printTriangle方法后,可以轻松复用或修改图形样式。
| 特性对比 | 基础版 | 通用版 |
|---|---|---|
| 灵活性 | 固定5行 | 支持任意正整数输入 |
| 可读性 | 直接但重复度高 | 模块化设计,结构清晰 |
| 扩展性 | 修改需调整主函数参数 | 仅需改变输入值即可生效 |
常见问题答疑FAQs
Q1: 如果想让倒三角使用其他字符代替星号怎么办?
A1: 只需将代码中的替换为目标字符即可,例如改为井号():把两处System.out.print("")改为System.out.print("#"),即可输出由组成的倒三角,这种修改体现了面向对象编程中的“开闭原则”——对扩展开放,对修改关闭。
Q2: 如何调整倒三角的方向使其朝左?
A2: 传统实现是右对齐的倒三角,若要改为左对齐,需删除所有生成空格的部分,具体操作如下:移除第一个内层循环(即去掉打印空格的逻辑),保留第二个内层循环直接打印符号,此时所有行的起始位置均为最左侧,形成向左延伸的倒三角形态,例如当rows=3时,输出将为:
