Java 实例 – 打印平行四边形(千字长文)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言
在编程学习中,图形打印是一个经典的实践课题。通过打印不同形状的几何图形,开发者不仅能掌握循环结构和条件判断的核心语法,还能培养逻辑思维能力。今天,我们将围绕 "Java 实例 – 打印平行四边形" 这一主题展开探讨,从基础概念到代码实现,逐步拆解这一看似简单却蕴含丰富编程技巧的案例。无论是编程新手还是有一定经验的开发者,都能从中获得启发。
基础概念:什么是平行四边形?
几何学中的平行四边形
平行四边形是 "两组对边分别平行且相等" 的四边形。其特点是:
- 相邻两边长度可以不同
- 对角线相互平分
- 内角对等
在代码中,我们通常通过 空格和星号(*)的排列组合 来模拟其倾斜的视觉效果。例如,一个简单的平行四边形可能呈现为:
* * *
* * * *
* * * * *
* * * * * *
代码视角的平行四边形
要打印这样的图形,需要解决两个核心问题:
- 空格的控制:每一行的起始位置需要通过空格调整倾斜角度
- 星号的分布:每一行的星号数量需随行数变化而增减
这两个问题可以通过 嵌套循环 结构来实现。接下来我们将通过代码示例逐步解析。
案例分析:基础版平行四边形打印
第一步:确定行数和列数
假设我们要打印一个 4行 的平行四边形,其形状如下:
* *
* * *
* * * *
* * * * *
观察规律:
- 第1行:空格数为3,星号数为2
- 第2行:空格数为2,星号数为3
- 第3行:空格数为1,星号数为4
- 第4行:空格数为0,星号数为5
规律总结:
- 空格数 = 总行数 - 当前行数
- 星号数 = 当前行数 + 1
第二步:编写基础代码
public class Parallelogram {
public static void main(String[] args) {
int rows = 4; // 设置行数
for (int i = 0; i < rows; i++) {
// 打印空格
for (int j = 0; j < rows - i - 1; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 0; k <= i; k++) {
System.out.print("* ");
}
System.out.println();
}
}
}
代码解析
- 外层循环(
for (int i = 0; i < rows; i++)
):控制行数,从0到rows-1循环。 - 空格循环(
for (int j = 0; j < rows - i - 1; j++)
):rows - i - 1
计算每行的空格数。例如,当i=0时,空格数为4-0-1=3
。
- 星号循环(
for (int k = 0; k <= i; k++)
):k <= i
确保星号数量随行数递增,例如i=0时输出1个星号(k
从0到0)。
运行结果:
*
* *
* * *
* * * *
第三步:调整输出格式
若希望星号之间没有空格,只需将代码中的 *
改为 *
,并调整循环次数。例如:
// 打印星号部分
for (int k = 0; k <= i; k++) {
System.out.print("*");
}
进阶技巧:让平行四边形更复杂
技巧1:动态输入行数
通过 Scanner 类 让用户输入行数,增加代码的灵活性:
import java.util.Scanner;
public class Parallelogram {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入行数:");
int rows = scanner.nextInt();
// 后续代码与基础版相同
}
}
技巧2:添加边框效果
使用 #
或其他符号作为边框,增强图形的立体感。例如:
// 打印边框后的星号
System.out.print("#");
for (int k = 0; k <= i; k++) {
System.out.print("* ");
}
System.out.print("#");
技巧3:倒置平行四边形
通过调整循环的起始和结束条件,实现 从宽到窄的倒置效果:
// 外层循环改为从rows-1到0
for (int i = rows - 1; i >= 0; i--) {
// 空格数改为 i
for (int j = 0; j < i; j++) {
System.out.print(" ");
}
// 星号数改为 rows - i
for (int k = 0; k < rows - i; k++) {
System.out.print("* ");
}
System.out.println();
}
常见问题与解决方案
问题1:图形倾斜方向不正确
现象:图形向左倾斜而非向右。
原因:空格循环的条件设置错误。
解决:检查空格循环的条件,确保 rows - i - 1
的计算正确。
问题2:星号数量不匹配
现象:某行星号数量比预期少1。
原因:循环条件中的 <=
和 <
使用不当。
解决:确保星号循环的终止条件为 <= i
(包含当前行数的增量)。
问题3:输出内容对齐异常
现象:图形整体偏移,或边框未闭合。
原因:未考虑字符串长度或边框符号的占位。
解决:使用固定长度的字符串(如 " * "
)或调整循环次数。
扩展思考:平行四边形的变体与应用场景
变体1:菱形与平行四边形的结合
通过组合正向和倒置的平行四边形,可以形成类似 钻石 的形状:
// 打印上半部分(平行四边形)
for (int i = 0; i < rows; i++) {
// 空格和星号逻辑与基础版相同
}
// 打印下半部分(倒置平行四边形)
for (int i = rows - 2; i >= 0; i--) {
// 同样逻辑,但方向相反
}
变体2:彩色平行四边形(控制台支持时)
使用 ANSI 转义码 为不同行添加颜色:
System.out.print("\033[31m"); // 红色
System.out.print("* ");
System.out.print("\033[0m"); // 恢复默认颜色
应用场景
- 编程学习:巩固循环、条件判断等基础语法。
- 面试题:考察逻辑分析与代码实现能力。
- 图形化界面开发:作为基础图形的构建模块。
结论
通过本篇 Java 实例 – 打印平行四边形 的解析,我们不仅掌握了如何用代码实现这一图形,更深入理解了循环嵌套、条件控制等核心编程思想。从基础代码到动态参数、从单一形状到复杂变体,每个环节都体现了编程的灵活性与创造性。
对于初学者,建议从最简单的版本开始调试,逐步增加复杂度;对于中级开发者,可以尝试将代码封装为方法,或探索图形的动态显示效果。记住:编程的本质是将抽象概念转化为可执行的逻辑,而图形打印正是这一过程的生动体现。
现在,不妨动手尝试调整代码参数,或设计你自己的平行四边形变体,让代码与想象力一同飞翔!