从锦囊妙计想到的26–采用中间辅助方法输出图形

  categories:资料  author:

前面的18~25一直围绕 图形输出进行的说明, 这里仍然继续。

重要的事情, 在说一下, 计算机是个动手的东西, 之所以这么多的输出要做, 就是要给大家一个直接能看到成果, 并且又能动手的东西可以做。

前面仅仅是说明一个方面的输出。 从本文开始陆续添加一些新知识, 包括 数组(Array), 链表(List), 映射(Map)方面的东西到程序中, 通过本文和后面的一些东西, 让大家陆续了解到这些东西的使用。

为了直观了解这些东西的用途, 仍然采用输出图形的办法进行。

看一下, 本文要输出的图形

一。 分析一下功能

上面图形, 我们可以在excel中做出来, 如下图

图形,包括11行, 11列, 在图形的中间有个空心的  三角形出现

如何输出?

在以前,我们都是采用System.out.println(xxx)来进行, 这个语句的特点是必须一次输出, 就是输出后不能修改。

因此若是还用以前的方法, 必须一次性输出结果不能后期处理。 观察上述图形, 若是一次输出,在处理空心图形部分, 会有些复杂。 因此本文不采用原有的方法。

 二。 研究采用的方法

通过上面分析我们本次不采用直接输出的办法, 我们采用

先准备一个临时的字符存储的地方=》 用全部*填满这个临时区域=》采用输出三角形的方法(本次输出空白)在临时区域中剔除不需要的*, 最后将最后结果输出

如下图, 先采用数组存储这个一样一个图形

如上图, 要存储的是一个  带*的 矩形,    具体情况如图中文字

这样我们可以采用一个 char类型的二维数组进行例如:

char[][]   TmpTuXing = new char[x][y];

其中x为行数, y为每行的 字符个数, 这里是 x=y=11

然后根据, 红色的空白区域情况, 把上面TmpTuXing中响应的*=》 ‘空白’(由于空白不方便, 这里用汉子代替, 写程序时请改过来)

最后根据 tmpTuXing的最终内容一次性输出全部数据到屏幕

三。 采用java环境编程实现上述代码

1. 启动easyeclipse程序, 创建java的项目

2. 编写代码

3. 边编写代码边运行, 有问题及时修改

4. 最后运行完整程序查看是否有问题

5. 修改大部分直接的数值到变量, 为程序扩展做出方便修改的地方

参考源代码如下:

public class TuXing {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 调用函数输出图形
		ShuChuTuXing(11, 11);

		// 通常在main函数中不写 逻辑代码, 这个是个人习惯, 感觉挺好, 推荐给大家
	}


	/*
	 * 输出图形
	 *
	 * lineCount:  行数
	 *
	 * charCount:  每行字符数
	 *
	 * */
	public static void ShuChuTuXing(int lineCount, int charCount)
	{
		// 准备一个临时的缓存区
		char[][] tmpTuXing = new char[lineCount][charCount];


		// 先用 *  填充整个   缓冲区
		ZhunBeiTuXing(tmpTuXing, lineCount, charCount);

		// 输出空白, 在缓存区
		ShuChuKongBai(tmpTuXing, 1, 1, 5);


		// 输出最终结果
		ShuChuAllData(tmpTuXing, lineCount, charCount);
	}

	// 这个是准备图形的 功能, 就是填充全部的 * 到 二维数组中
	public static void ZhunBeiTuXing(char[][] t, int lineCount, int charCount){
		for(int i = 0; i < lineCount; i ++ )
		{
			// 输出图形行
			ZhunBeiTuXingLine(t[i], charCount);
		}
	}

	// 输出图形的行
	public static void ZhunBeiTuXingLine(char[] t,int charCount){
		for(int i = 0; i < charCount; i ++)
		{
			t[i] = '*';
		}
	}

	// 这个是 在缓冲区中, 剔除*的功能, 剔除*后, 为空白
	/**
	 *  t:  缓存区
	 *  left, 空白三角形 开始的 从左边数的  第几列, 注意要 从0开始算, 这样方便 数组操作
	 *  top,  空白三角形 开始的 从上开始的  行数,  注意从 0开始算
	 *  lineCount, 空白三角形的行数
	 *
	 */
	public static void ShuChuKongBai(char[][] t, int left, int top, int lineCount){
		for(int i = 0; i < lineCount; i++)
		{
			ShuChuKongBaiLine(t[top + i], left,  i + 1 );
		}
	}

	/***
	 *
	 * @param t 缓存
	 * @param left  左边开始的行数
	 * @param line  现在输出的第几行
	 */
	public static void ShuChuKongBaiLine(char[] t, int left, int line){
		for(int i = 0; i < line; i++ )
		{
			t[left + i] = ' ';
		}
	}


	// 下面先编写 这个函数, 可以尽早坚持前面的代码是否正确
	// 这个函数输出 全部的最终图形数据
	public static void ShuChuAllData(char[][] t, int lineCount, int charCount){
		for(int i = 0; i < lineCount; i++ )
		{
			for(int j = 0; j < charCount; j++ )
			{
				System.out.print(t[i][j]);
			}
			System.out.println();
		}
	}
}

参考源代码如下MyArrayTuXing

小结

一)数组

本文其实核心目标是 说明数组和数组的应用等。 前面的例子专门为这个目标而构思的

如下图

上图是一组柜子, 柜子由若干格子组成,  我们要对这组格子进行管理, 控制等

我们的目标是, 这组柜子 既要可以被作为一个整体进行管理, 也要可以被做为一个个的个体被处理, 为了解决这个问题, 就可以创建一个数组。 其实现在概念已经扩展了, 计算机里面数组已经可以是任何东西了, 不仅仅是数组了, 但是概念还是沿用了下来。

数组有如下的一些事情要注意

1. 数组有一个统一的名字, 这样便于 统一管理他们全体

2. 数组可以一个一个的管理数组里面的个体, 这样才能进行合理的优化, 毕竟都是不一样的才正常, 否则世界中什么都一样那还能存在

3. 数组中每个个体的类型必须是相同的, 不能一个是狗, 一个是兔子,(当然可以都是动物)

4. 数组中的每个个体都是相互相邻的, 看上面图片就知道了, 因此若是在两个个体中间插入新的个体(柜子)是不行的。没有空间了

5. 若是要在格子里面放入东西插入一个新元素到数组中(队列中), 首先格子后面要有空间, 然后插入元素插入位置后面的东西都要后移一位, 然后空出位置后, 才能插入新元素, 前提是 数组后面有没有用的空间。

特别注意:  在格子里面东西, 就是数组里面放数据, 和数组本身扩大格子扩大空间)是不同的

6. 若是确实要扩展数组的格子如何?  其实要先做一个更大的 有更多格子的 柜子, 然后, 把对应位置的  东西都搬运过去, 然后更换一下, 数组的标签(就是数组名字), 可以看到成本非常高的!

7. 操作数组整体就可以采用数组名称进行

8. 若是多维数组, 可以转换为多个低维数组, 分别操作和处理

 

二) 多维数组

数组就是格子

1. 一维数组

如下图 由一排格子构成的数组就是  一维数组

在java语言中就是可以这么写:

\

int[] shuZhu = new int[10];

其中int[] 是数组的类型,   shuZhu是 数组的整体名称, new 创建一个东西意思

int[10];   中 10是格子的个数, 具体的可以是任意的一个 正整数, 不能是 小数或者浮点数等

也不能是变量

若是需要多排格子怎么弄呢?

2. 多维数组

如上图 , 二维数组, 就是多排的一维数组放到一起构成的

数组类型[第几排][这个排里面的第几个]    =》 这个就是二维数组了

在使用时先指定排数, 然后在指定第几个元素

3. 三维数组

如上图, 三维数组就像魔方一样, 您要先指定那个面, 第几排, 本排里面第几个元素

数组名称[第几面][第几排][第几个]      这样就可以操作一个数组了。

今天就到这里了, 下一篇, 在说明一下数组

相关视频:  链接:https://pan.baidu.com/s/1ObLFyGnEueDMOCMbatlPvA   提取码:1wyb



快乐成长 每天进步一点点      京ICP备18032580号-1