关于使用Java中的for循环和if语句打印空心菱形的详细分析(也算是通过重新梳理一遍来加深自己的理解吧!)
啥也别说了,小二,先上代码:
(图一)
如以上代码所示,由于程序的执行顺序是从左至右,由上而下的,所以当我们想要在DOS窗口打印 一个空心菱形如图二所示
(图二)
时:我们可以将其分成上下两部分,
图一中,我们首先创建一个Scanner对象,通过它的nextInt()方法从DOS窗口接收一个由键盘录入的int类型的数值(Scanner类的详细信息请查看JavaAPI)。然后将这个数赋值给total这个变量,即我们想要打印的空心菱形的总行数。
通过total,分别给定上半部分的行数half和下半部分的行数halfMore。
这时,我们分两部分来进行:(以total=9为例)
上半部分:
这个时候,上半部分的行数为3行,首先用一个外层语句来控制要打印的行数,如图一中的⑴行的语句。
这个循环的内部内容:
我们每一次循环即在从左至右,由上而下的打印顺序下每一行要依次打印些什么!
在打印的过程中涉及三个主要要素:行数、空格数、星号数;
一个次要要素:换行。
首先,因为我们让外层循环控制的是“行数”,所以,我们要分别分析空格数和行数、星号数和行数之间的联系:
左边空格数和行数:
第n行 左边空格数an
1 4
2 3
3 2
4 1
可以看出,在行数呈等差递增的时候,左边空格数是呈等差递减的。
即:a1 = 4;
a2 = 3;
a3 = 2;
a4 = 1; 由等差数列的通项公式:an = a1 + (n-1)*d 得:an = 3 + (-1)(n-1) = 3 - n + 1 。
也就是:左边空格数 = 行数 - 第几行 + 1 。
用for循环打印就如图一中的⑵行的代码。
左边的空格打印好了后紧接着就是打印一个星号,再打印中间空格数:
中间空格数和行数:
第n行 中间空格数an
1 0
2 1
3 3
4 5
同求左边空格的做法大致一样,稍微不同的是,除了首项外其余项呈等差递增。
由于我们采用的是for循环,循环初始化条件为1,所以当我们的循环条件为负数时,打印的次数也是0次。
于是我们可以将首项置为-1,则有: an = -1 + (n-1)* 2 = 2 * n - 3 。这就有了图一中的⑶行的代码。
⑷行的判断语句是用来打印除了第一行之外的右边的星号,最后,最外层控制行数的循环每转一次就换一次行。
下半部分:分析思路同上半部分的,就是跟上半部分的相反打印罢了。
最后,一定要牢记,编程时:
思路一定要时刻清晰!
思路一定要时刻清晰!
思路一定要时刻清晰!