前面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