从锦囊妙计想到的21–函数参数法控制输出

前面18,19,20都在围绕图形输出进行说明, 本文仍然采用类似的方法进行说明。

为什么老是围绕字符输出进行说明?

1. 字符输出简单, 是计算机编程里面最简单的有输出的方法之一了

2. 字符图形输出是可以看到的, 这样程序编写的是否正确马上能看到

3. 通过不但修改您编写的称, 您可以体会程序中的各种情况

4. 最后程序输出是以后调试程序的必不可少的技能

本文的内容还是输出一个图形, 现在输出图形如下:

一。 分析图形特点

还是按照前面的文章的办法, 我们要分析一下这个图形输出的特点

如上图, 图形由多行组成, 因此最简单的办法, 是一行一行的输出

如下图

二。编写文档说明程序的实现方法

我们可以定义

函数f1输出  第一行,

函数f2输出 第二行,

。。。

函数f6输出  第六行。

最后需要一个主函数, 然后调用这些函数

如下:

main(){

f1();

f2();

f3();

f4();

f5();

f6();

}

先写完上面代码后,还需要写函数f1()的定义

f1(){

打印输出一个*

*

}

f2(){

打印输出2个**

**

}

...

f6(){

打印输出6个*

******

}

三。采用java语言进行软件开发

启动eclipse软件工具, 创建一个java项目, 创建一个类,这个是java必须的

如下图, 选择java project项目后, 在下面对话框中按照图示操作

选择完成 finish后, 请参照如下图进行操作

选择项目后, 然后,在src目录上选择右键点击, 然后在弹出的菜单上,选择new, 最后选择class项目,然后参照下图进行

如上图, 进行操作,强调两点: 1. 选择 public static void main的选项

2. 在类名哪里, 这里用汉语拼音方法命名类名, 并且每个拼音的首字母都是大写的, 这样能快速了解类名的含义

然后在main函数里面输入如下图代码:

特别注意上图中2处指向的地方, 这里是编辑自动检测出, 程序中存在的问题, 这里的问题是我们仅仅写了函数的调用, 而没有编写函数的实现。具体操作如下

类似的, 我们要定义f2()。。。。。 f6函数

代码如下:

public class ShuTuXing {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		f1();
		f2();
		f3();
		f4();
		f5();
		f6();
	}
	static void f1(){
	}
	static void f2(){
	}
	static void f3(){
	}
	static void f4(){
	}
	static void f5(){
	}
	static void f6(){
	}
}

上面是一个阶段性的代码编写过程, 在这个过程中我们编写了几个空的函数, 没有任何功能的函数。

下面是逐个从f1  到 f6实现各个函数。具体的过程如下:

编写f1的函数实现

编写完成f1的功能后, 我们马上要运行这个函数看看效果

请特别注意:

通常情况下, 我们写程序都可能有问题, 因此, 我们每编写一些代码就要检验一下, 看看是否正确, 若是不正确, 由于代码还很少, 因此可以方便修改!

如下图:

我们继续完成f2函数

如上图, 完成f2后的 执行结果

继续努力, 知道完成f6函数

完成后如下图:

参考代码如下:

public class ShuTuXing {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		f1();
		f2();
		f3();
		f4();
		f5();
		f6();
	}
	static void f1(){
		System.out.println("*");
	}
	static void f2(){
		System.out.println("**");
	}
	static void f3(){
		System.out.println("***");
	}
	static void f4(){
		System.out.println("****");
	}
	static void f5(){
		System.out.println("*****");
	}
	static void f6(){
		System.out.println("******");
	}
}

通过上面代码确实能实现相关的需求, 但是他不并好, 下面慢慢分析他完善它

四。 调整完善代码(参数化,减少函数数量)

上面的代码中, 几个函数的实现其实非常类似, 近似相同

是否可以把上面的代码优化为一个函数中, 然后通过函数参数来控制输出*

参数? 参数是什么, 就是在函数的定义中, 一个可以变化的量,这样可以大大提高函数的通用性

如上图, 通过在函数f中根据传入的参数, 采用if语句判断需要打印的*的个数, 然后进行处理

代码如下:

public class ShuTuXing2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		f(1);
		f(2);
		f(3);
		f(4);
		f(5);
		f(6);
	}
	static void f(int count)
	{
		if(count == 1)
		{
			System.out.println("*");
		}
		if(count == 2)
		{
			System.out.println("**");
		}
		if(count == 3)
		{
			System.out.println("***");
		}
		if(count == 4)
		{
			System.out.println("****");
		}
		if(count == 5)
		{
			System.out.println("*****");
		}
		if(count == 6)
		{
			System.out.println("******");
		}
	}
}

上面代码可以输出相关图形

五。 循环语句减少重复代码

上面的办法中, 已经有效的减少了函数的数量, 但是在一个函数里面还有很多重复的代码, 要通过过多的if语句来输出*, 是否还有更好的办法。

通常采用循环语句来减少重复的工作, 参考代码如下:

public class ShuTuXing3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		f(1);
		f(2);
		f(3);
		f(4);
		f(5);
		f(6);
	}
	static void f(int count)
	{
		for(int i = 0; i < count; i++)
		{
			System.out.print("*");
		}
		System.out.println("");
	}
}

如上面代码, 函数f中通过循环语句,进行输出, 有效减少了重复的代码

上面代码中f函数中的重复代码已经没有了, 那么主函数还可以继续优化,参考代码如下

public class ShuTuXing5 {
	public static void main(String[] args) {
		for(int i = 1 ; i <= 6 ; i++)
		{
			f(i);
		}
	}
	static void f(int count)
	{
		for(int i = 0; i < count; i++)
		{
			System.out.print("*");
		}
		System.out.println("");
	}
}

 六。 给代码添加注释,方便阅读

上面代码是简单了, 但是很难让人看懂, 特别是时间长了, 可能会忘记, 因此需要给程序添加足够的说明, 就是注释!

参考代码如下:

/**

输出如下图形
*
**
***
****
*****
******

 */


public class ShuTuXing6 {

	// 主函数, 程序从这里开始执行
	public static void main(String[] args) {

		// 循环输出每一行
		for(int i = 1 ; i <= 6 ; i++)
		{
			// 调用行输出函数, 每行的*的数量, 由变量i决定
			f(i);
		}
	}

	/*
	 *
	 输出一行*
	 ***
	 其中*的数量, 有函数的参数 count决定
	 * */
	static void f(int count)
	{
		// 循环输出count个*
		for(int i = 0; i < count; i++)
		{
			System.out.print("*");
		}

		// 最后输出一个 换行符
		System.out.println("");
	}
}

 

 总结一下

1. 采用分析=》设计=》开发=》检验(测试)=》完善的过程  进行开发

2. 程序编写过程中, 采用 化整为  零的办法, 把一个 大的复杂的功能, 划分为若干个小的功能来处理

3. 依次编写每个小功能, 在编写小功能时, 可以变化为更小更小的功能

4. 逐个编写小功能, 每编写一个小功能后, 就运行一下程序检验一下功能是否正确

5. 汇总全部的功能, 然后不断检验功能是否满足了要求。

6. 不断优化完善程序, 知道代码合理完善

7. 代码要添加足够的 说明(注释), 为以后阅读方便

 

参考源代码:ShuChuSanJiaoXing

 

相关文章

计算机介绍                                  从锦囊妙计想到的01

流程图(分支结构)介绍          从锦囊妙计想到的02

线程介绍                                     从锦囊妙计想到的03

循环结构介绍                             从锦囊妙计想到的05

流程线程总结                             从锦囊妙计想到的06

cpu和线程定义、开始               从锦囊妙计想到的07

分布式计算                                  从锦囊妙计想到的08

分布式中事件和计数                 从锦囊妙计想到的09

内容总结                                     从锦囊妙计想到的10

数据类型,变量简介                从锦囊妙计想到的11

函数和参数                                从锦囊妙计想到的12

用户交互与数据输入输出       从锦囊妙计想到的13

人机交互界面                            从锦囊妙计想到的15 

过程与对象                                从锦囊妙计想到的16

同步和异步                                从锦囊妙计想到的17

顺序打印                                    从锦囊妙计想到的18

数据输入输出                            从锦囊妙计想到的19

屏幕坐标和打印                        从锦囊妙计想到的20

java函数控制输出                     从锦囊妙计想到的21

逐步细化解决复杂问题           从锦囊妙计想到的22

java入门                                    从锦囊妙计想到的23

java复杂过程分析                   从锦囊妙计想到的25

中间辅助功能解决问题          从锦囊妙计想到的26

叠加操作输出复杂图形          从锦囊妙计想到的27

时间和空间                               从锦囊妙计想到的28

编写边测解决问题                  从锦囊妙计想到的29

让程序动起来                          从锦囊妙计想到的30

程序往复运动                           从锦囊妙计想到的31