Java4Android自学记录(8-3):练习课 - 打印特殊图案

1 目录及资源索引

  Java4Android自学过程目录及资源索引

2 题目及练习

  题目:在命令行当中打印出如下图形

   *
  * *
 * * *
* * * *

  按照老师讲解的步骤一步一步来操作:

  1. 定义一个类,名字随意;
  2. 在类当中定义一个主函数;
  3. 使用 for 循环 打印4行,每行一个 “*”
  4. 把一个 星号 看做一个 (星号 + 空格);
  5. 打印4行,第一行一个,第二行2个,第三行3个,以此类推
  6. 在打印 “* ” 之前要先打印空格,第一行3个,第二行2个,以此类推。即一共n行,第一行 n-1 个,第二行 n-2 个。
  7. 需要注意一点,原来用的打印,是 println ,是换行打印,用在此处可能要出问题。可以用 print ,就好了。

  第一次尝试,代码如下:

class TestTriangle
{
	public static void main(String args[])
	{
		for(int i = 0; i < 4; i++)			// 行数
		{			
			for(int j = 0; j < 4; j++)		// 列
			{
				System.out.print("* ");		// 打印 *
			}
			System.out.print("");
		}
	}
}

  运行结果如下,发现有点不太对,要的是4行,每行4个星号,但是我这个全打印到一行上边了,观察一下代码,发现在行数那个 for 循环中,忘记换行了。
在这里插入图片描述
  又对代码做了部分修改调整,调整后的代码如下:

class TestTriangle
{
	public static void main(String args[])
	{
		for(int i = 0; i < 4; i++)
		{	
			for(int j = 0; j < 4; j++)
			{
				System.out.print("* ");
			}
			System.out.print("\n");			// 此处增加每一行结束后的换行
		}
	}
}

  运行结果如下:
在这里插入图片描述
  现在距离我们想要的结果还是有一点点距离,我们再进一步的调整代码:

class TestTriangle
{
	public static void main(String args[])
	{
		for(int i = 1; i <= 4; i++)
		{
			for(int j = 0; j < i; j++)		// 修改列数,第一行小于1,依次类推
			{
				System.out.print("* ");
			}
			System.out.print("\n");
		}
	}
}

  运行结果如下:
在这里插入图片描述
  有点接近,但是还不是我们想要的,再来观察一下这个跟最终想要的结果之间的联系,第一行,1个星号,但是开头有3个空格;第二行有2个星号,开头有2个空格;第三行有3个星号,开头有1个空格;第四行有4个星号,开头有0个空格。有没有发现一点规律,一共4行,第一行1个星号,3个空格;一共4行,第二行2个星号,2个空格;一共4行,第三行3个星号,1个空格;一共4行,第四行4个星号,0个空格。 规律是不是很明显了?下边再次修改代码:

class TestTriangle
{
	public static void main(String args[])
	{
		for(int i = 1; i <= 4; i++)
		{
			for(int j = 0; j < (4 - i); j++)	// 打印每行开始的空格,个数为总行数减星号个数。
			{
				System.out.print(" ");
			}	
			
			for(int j = 0; j < i; j++)			// 打印星号,和上边的空格在同一行
			{		
				System.out.print("* ");
			}
			System.out.print("\n");				// 一行结束后,再换行
		}
	}
}

  运行结果如下,此次终于成功了,哈哈哈哈
在这里插入图片描述

3 扩展题目

  自己根据上述特殊形状,想到了打印出一个菱形出来,其实就是上边那三行,在对称下来,自己测试的代码如下:

class TestTriangle
{
	public static void main(String args[])
	{
		for(int i = 1; i <= 4; i++)				// 菱形上半部分 for 循环
		{
			for(int j = 0; j < (4 - i); j++)	// 每一行前的空格
			{
				System.out.print(" ");
			}	
			
			for(int j = 0; j < i; j++)			// 打印出每一行的星号
			{		
				System.out.print("* ");
			}	
			System.out.print("\n");				// 每一行结束,要换行
		}
		for(int i = 1; i <= (4 - 1); i++)		// 菱形下半部分 for 循环,注意最长那行不算
		{
			for(int j = 0; j < i; j++)
			{
				System.out.print(" ");			// 每一行前边的空格,和上半部分刚好相反
			}
			
			for(int j = 0; j < 4 - i; j++)
			{		
				System.out.print("* ");			// 每一行的星号
			}
			
			System.out.print("\n");				// 每一行结束后,进行换行
		}
	}
}

  程序运行结果如下:
在这里插入图片描述
  哈哈,虽然成功了,但是程序优化空间还是很大的。继续努力。

4 课后作业

  老师在这节课结束时,留了课后作业,题目如下:

1、如果要求大家编写一个程序,可以打印出任意行的与本题类似的图形,应该怎么做?
2、优化上一个求素数的程序代码。(这个暂时还没想好,我自己的程序已经做了部分优化)

5 总结

  1. 学会了打印特殊图案的步骤;
  2. 进一步熟悉了 for 循环的使用方法;
  3. 还需要更加熟练,在对一些代码思路上,理解还不是很到位,有的时候就是考虑不到。看来还要多写才行;
  4. 这样一步一步测试,一步一步调试出想要的结果,感觉很好,继续努力~
发布了88 篇原创文章 · 获赞 84 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/Fighting_Boom/article/details/104219870