关于流程控制语句,有这么几个很有趣的题目,大家一起来看看吧!
1.
关于这道题其实很简单,第一行是一颗星,第二行是两颗星,第三行是三颗星,以此类推,很有规律,只需用两个嵌套的for循环就可以完成,让我们来看代码。
- for(int line=1;line<=7;line++){
- for(int i=1;i<=line;i++){
- System.out.print("*");
- }
- System.out.println();
- }
2.
这道题是上面那道题的升级版, 加了点难度,但其实也不难。分析过程写在代码里面。
- /* i j
- * 1 1
- ** 2 1 2
- *** 3 1 2 3
- **** 4 1 2 3 4
- ***** 5 1 2 3 4 5
- ****** 6 1 2 3 4 5 6
- ***** 7 1 2 3 4 5
- **** 8 1 2 3 4
- *** 9 1 2 3
- ** 10 1 2
- * 11 1
- j<=i && j<=12-i
- */
- for(int i=1;i<=11;i++){
- for(int j=1;j<=i&&j<=12-i;j++){
- System.out.print("*");
- }
- System.out.println();
- }

我们通过分析可以发现,前六行必须满足的规律是j<=i,但它同时也满足 j<=12-i,而后5行必须满足的规律是j<=12-i,但是它同时也满足j<=i,所以中间嵌套的for循环的条件是j<=i && j<=12-i。
3.
这道题跟前面两道题相比较,又增加了一点难度,把第二题转了个方向,这就意味着我们不仅仅要打印星星,还要打印星星前面的空格,空格数先依次递减,再递增。所以我们再打印星星之前要先打印空格。
- /* k=|i-6| |k| 当前行的最大的空格数
- k i j
- * -5 1 1
- ** -4 2 1 2
- *** -3 3 1 2 3
- **** -2 4 1 2 3 4
- ***** -1 5 1 2 3 4 5
- ****** 0 6 1 2 3 4 5 6
- ***** 1 7 1 2 3 4 5
- **** 2 8 1 2 3 4
- *** 3 9 1 2 3
- ** 4 10 1 2
- * 5 11 1
- */
- for(int i=1;i<=11;i++){
- for(int k=1;k<=Math.abs(i-6);k++){
- System.out.print(" ");
- }
- for(int j=1;j<=i&&j<=12-i;j++){
- System.out.print("*");
- }
- System.out.println();
- }

4.
这道题我们可以发现,这次不仅星星的最前面要打印空格,星星和星星中间也要打印空格,其实很简单,我们只需要在上个题目打印星星的后面加上一个空格就可以了。
- /* k=|i-6| |k| 当前行的最大的空格数
- k i j
- * -5 1 1
- * * -4 2 1 2
- * * * -3 3 1 2 3
- * * * * -2 4 1 2 3 4
- * * * * * -1 5 1 2 3 4 5
- * * * * * * 0 6 1 2 3 4 5 6
- * * * * * 1 7 1 2 3 4 5
- * * * * 2 8 1 2 3 4
- * * * 3 9 1 2 3
- * * 4 10 1 2
- * 5 11 1
- */
- for(int i=1;i<=11;i++){
- for(int k=1;k<=Math.abs(i-6);k++){
- System.out.print(" ");
- }
- for(int j=1;j<=i&&j<=12-i;j++){
- System.out.print("* ");
- }
- System.out.println();
- }

5.
这道题把中间的星星都去掉了,又增加了一点难度,这就意味着我们再打印星星的时候要判断,如果有星星的地方我们才打印星星,否则就打印空格。
- /* k=|i-6| |k| 当前行的最大的空格数
- k i j
- * -5 1 1
- * * -4 2 1 2
- * * -3 3 1 2 3
- * * -2 4 1 2 3 4
- * * -1 5 1 2 3 4 5
- * * 0 6 1 2 3 4 5 6
- * * 1 7 1 2 3 4 5
- * * 2 8 1 2 3 4
- * * 3 9 1 2 3
- * * 4 10 1 2
- * 5 11 1
- j==1 j==i j+i==12
- */
- for(int i=1;i<=11;i++){
- for(int k=1;k<=Math.abs(i-6);k++){
- System.out.print(" ");
- }
- for(int j=1;j<=i&&j<=12-i;j++){
- if(j==1||j==i||j+i==12){
- System.out.print("* ");
- }else{
- System.out.print(" ");
- }
- }
- System.out.println();
- }

怎么样,这些题是不是很有意思呢?我个人觉得它不但有意思还能锻炼你的熟练运用循环的能力,一举两得!