前面26介绍了采用应用中间一个辅助数组的办法, 来辅助缓存中间结果, 然后可以绘制复杂的图形, 今天继续这个话题, 看一个在略微复杂一点的输出
先看一下, 输出的图形
如上图, 若是输出这个图形不采用中间缓存的办法, 直接写, 要写大量的if语句, 并且没办法扩展
若是采用上面26中的方法, 就会简单很多
图中输出的图形可以为如下情况
如上图, 可以看到一共有3个图形, 最外面的*号构成的图形, 里面蓝色的由空白构成的三角形
最后是一个红色的小矩形。
这三图形叠加到一起构成了一个完整的图形
1. 采用主函数启动一个功能函数, 在功能函数里面传入必须的参数进行显示
这样当需要扩展时, 仅仅调整参数就可以扩大或者调整输出
2. 采用二维数组存储中间输出的结果
3. 采用一个专用函数输出最外层的带*的大矩形
4. 采用专用函数在中间的输出结果中输出空白函数的三角形
5.采用函数在前面的中间结果的基础上输出小的空白符号的矩形
6. 最后直接输出中间结果的最终结果到计算机屏幕
参考过程如下
main { 调用 图形输出 } || / / // 图形输出{ 准备二维数组构成的缓存区 || / / // 输出最外层的带*的矩形到中间缓存(二维数组中) || / / // 在中间缓存中输出空白图形组成的三角形 || / / // 在中间缓存中输出空白图形组成的小矩形 || / / // 最后整体将全部图形输出到计算机屏幕上 }
1. 启动easyeclipse程序创建一个java的工程
2. 编写程序实现功能
具体代码参考:
public class SanTuXing { /** * 输出三个图形叠加的效果 */ public static void main(String[] args) { // TODO Auto-generated method stub // 调用图形输出函数 TuXing(11, 11); } /** * 这个函数输出 要打印的图形 * @param x 图形的行数 * @param y 图形的列数 */ public static void TuXing(int x, int y) { // 准备一个 临时的缓存区, 系统在初始时, 给每个元素一个默认值了 char[][] tmpTuXing = new char[x][y]; // 输出最外面大的 * 的图形 到 临时缓冲区 ShuDaDuXing(tmpTuXing, x, y); // 输出中间的三角形 到 临时缓冲区 ShuSanJiaoXing(tmpTuXing, 2, 2, 6); // 输出小的矩形到 临时缓冲区 ShuXiaoJuXing(tmpTuXing, 5, 2, 8, 2); // 最后输出全部的数据 // 优先编写 最后输出的函数, 这样可以检验前面的代码的 正确与否 ShuChuAll(tmpTuXing, 11, 11); } /** * 输出中间的小矩形 * @param t 缓冲区 * @param left 矩形开始的左边 * @param top 矩形开始的 上面行数 * @param line 矩形有的行数 * @param count 矩形每行的个数(空白) */ public static void ShuXiaoJuXing(char[][] t, int left, int top, int line, int Count){ for(int i = 0; i < line; i++) { ShuXiaoJuXingLine(t[i + top], left, Count); } } /** * 输出小矩形的行 * @param t 行缓存 * @param left 左边开始的 * @param Count 每行的个数 */ public static void ShuXiaoJuXingLine(char[] t, int left, int Count){ for(int i = 0; i < Count; i++) { t[left + i] = ' '; } } /** * 输出中间的三角形 * @param t 缓冲区 * @param left 三角形开始的 左边列数 * @param top 三级星开始的 上面行数 * @param line 三角形有的 行数 */ public static void ShuSanJiaoXing(char[][] t, int left, int top, int line){ // 输出没一行 for(int i = 0; i < line; i++) { ShuSanJiaoXingLine(t[i + top], left, i+1); } } /** * 输出三角形的一行 * @param t 行缓存 * @param left 开始的左边 * @param line 第几行, 其实就是这行的 空白的个数 */ public static void ShuSanJiaoXingLine(char[] t, int left, int line){ for(int i = 0; i < line; i++) { t[left + i ] = ' '; } } /** * 输出大的 最外层的矩形 * @param t 临时缓冲区 * @param x 行数 * @param y 每行的 *的个数 */ public static void ShuDaDuXing(char[][] t, int x, int y){ for(int i = 0; i < x; i++) { ShuDaDuXingHang(t[i], y); } } /** * 输出 一行的* * @param t 行的缓存 * @param y 行的个数 */ public static void ShuDaDuXingHang(char[] t,int y){ for(int i = 0; i < y; i++) { t[i] = '*'; } } /** * * 输出全部的 符号到计算机屏幕 * @param t 缓冲区 * @param x 行数 * @param y 每行的个数 */ public static void ShuChuAll(char[][] t, int x, int y) { // 行循环 for(int i = 0; i < x; i++) { // 列循环 for(int j = 0; j < y; j++) { // 输出行里面的 一个列的数据 System.out.print(t[i][j]); } // 这个行完成后, 打印一个换行符号 System.out.println(); } } }
fda