题目:根据用户输入的行数n打印空心三角形,下图分别为n=3、n=4、n=5和n=10的效果图
第一步:观察效果图
- 输入的行数为3,打印结果就有3行;输入的行数为4,则打印结果就有4行;以此类推,输入的行数为n,则打印n行
- 第一个图,第一行打印1颗星;第二行打印2颗星;第三行打印3颗星;
- 第二个图,第一行打印1颗星;第二行打印2颗星;第三行打印2颗星,且两颗星中间有一个空格,所以,第三行是打印了3个,分别是星号、空格、星号;第四行,打印了4颗星。
- 第三个图,第一行打印1颗星;第二行打印2颗星;第三行打印2颗星,且两颗星中间有一个空格,所以,第三行是打印了3个,分别是星号、空格、星号;第四行,打印了2颗星,且两颗星中间有2个空格,所以第四行打印了4个,分别是星号、空格、空格、星号,第5行打印了5颗星
- 第四个图,第一行打印1颗星;第二行打印2颗星;第3~9行,均打印2颗星,如果把行数记为n,,则每行中两颗星号之间的空格数分别是n-2。
第二步:设计解决方案与实现
首先打印的图形的行数需要用户进行输入,故,首先设计有一个数据活动传输数据给自定义活动。
自定义活动用于打印空心三角形
根据观察到的现象,发现,每个图形的第一行打印1颗星;第二行打印2颗星,最后一行打印的星号数和输入的行数相等。
其余的行数,打印的星号数均为2,分别在所在行的第一个位置和最后一个位置,其他的位置打印空格。
如果将行数i从0开始计数,则第一行是i==0时,表示第一行,此时需要打印1颗星;第二行是i==1,此时需要打印2颗星;所以,打印的星号数刚好可以通过行数i+1计算所得。当i==外部输入的行数时,此时打印的星号数等于行数,由于行数从0开始计数,而外部传入的行数是从1开始计数的,所以i==外部行数-1时,表示是最后一行了,需要打印外部行数这么多颗星。
由于要打印1颗星、打印2颗星甚至是n颗星,所以,创建一个自定义活动,用于打印n颗星(之前的讲解中曾多次提到,具体思考不再讲解)
刚刚已经考虑了第一行,第二行、第n行。还有3~n-1行的每一行打印,这些行有一个特点:每行均有两颗星,分别在该行的第一个位置和最后一个位置,其余位置均为空格。所以,需要单独写一个自定义活动来进行处理。
用变量j来标记某一行的位置,则j==0和j==n时,分别表示该行的第一个位置和最后一个位置,该位置上需要打印的是星号。其余位置,需要打印的是空格。
所以,需要将每行的每一个位置上应该打印的进行拼接,直到循环结束,把一行的所有需要打印的数据拼接完成后,形成:星号+空格(可能有多个)+星号的形式,再进行打印。
第三步:测试
输入10测试
输入20测试: