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 实例 – 打印平行四边形" 这一主题展开探讨,从基础概念到代码实现,逐步拆解这一看似简单却蕴含丰富编程技巧的案例。无论是编程新手还是有一定经验的开发者,都能从中获得启发。


基础概念:什么是平行四边形?

几何学中的平行四边形

平行四边形是 "两组对边分别平行且相等" 的四边形。其特点是:

  • 相邻两边长度可以不同
  • 对角线相互平分
  • 内角对等

在代码中,我们通常通过 空格和星号(*)的排列组合 来模拟其倾斜的视觉效果。例如,一个简单的平行四边形可能呈现为:

   * * *  
  * * * *  
 * * * * *  
* * * * * *  

代码视角的平行四边形

要打印这样的图形,需要解决两个核心问题:

  1. 空格的控制:每一行的起始位置需要通过空格调整倾斜角度
  2. 星号的分布:每一行的星号数量需随行数变化而增减

这两个问题可以通过 嵌套循环 结构来实现。接下来我们将通过代码示例逐步解析。


案例分析:基础版平行四边形打印

第一步:确定行数和列数

假设我们要打印一个 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();  
        }  
    }  
}  

代码解析

  1. 外层循环for (int i = 0; i < rows; i++)):控制行数,从0到rows-1循环。
  2. 空格循环for (int j = 0; j < rows - i - 1; j++)):
    • rows - i - 1 计算每行的空格数。例如,当i=0时,空格数为4-0-1=3
  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 实例 – 打印平行四边形 的解析,我们不仅掌握了如何用代码实现这一图形,更深入理解了循环嵌套、条件控制等核心编程思想。从基础代码到动态参数、从单一形状到复杂变体,每个环节都体现了编程的灵活性与创造性。

对于初学者,建议从最简单的版本开始调试,逐步增加复杂度;对于中级开发者,可以尝试将代码封装为方法,或探索图形的动态显示效果。记住:编程的本质是将抽象概念转化为可执行的逻辑,而图形打印正是这一过程的生动体现。

现在,不妨动手尝试调整代码参数,或设计你自己的平行四边形变体,让代码与想象力一同飞翔!

最新发布