每日一题——打印菱形

344 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
大家好,我是洋哥。今天给大家带来的是每日一题——打印菱形。

题目要求

如下图所示,学完了Java程序流程控制,你能够独立的用编程打印出下面的图形吗,快来动手试试吧。

QQ截图20220226205235.png  

建议用时:10-15分钟

难度:中等

 

知识点考察

这道题主要考察的是Java程序流程控制。要注意的是这道题在原有题目的基础上加大了难度,需要分布处理。

  

 

问题分析

第一,我们要观察图形。我们发现图形可以划分成两个部分来分别实现。有人问为什么要划分成两个部分,如果你之前做过类似的题目,像下面这种,

QQ截图20220226205247.png

你就会发现,他是按一个方向增长或者减少的,而本题是先增后减,不拆的话很难用循环实现,拆开做刚好。

 

第二,我们先看上半部分。我们要知道这是一个嵌套循环,外面的for是用来控制行数,里面的for用来控制列数。我们把一到五行看成上半部分,要注意空格也要算作一个单位,每行有9个单位,第一行*前4个空格,一个**后4个空格,第二行*前3个空格,一个"*空格",一个*,3个空格;第三行2个空格,2个"*空格",一个*,2个空格。找到规律了嘛。行数+*前空格=5,"*空格"=行数-1,必有一个**后空格和*前一样,重复语句即可。记得一行结束时换行。

 

第三,看下半部分。和上半部分一样的分析思路,就是要找到其中的规律和联系。*前空格数与行数一致(行数重新计算),"*空格"=4-行数,必有一个*,然后依此来构造for循环。

注:此方法不一定是最简便的仅供参考。

 

相关知识点复习

嵌套循环(多重循环)

将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环内层循环

当遇到打印类的问题,外面的for是用来控制行数,里面的for用来控制列数。

 

代码实现

package com.control.contact;
import java.util.Scanner;
public class ForWhileTest1 {


	public static void main(String[] args) {


	//上半部分
		for(int i=1;i<=5;i++){
			for(int j=1;j<=5-i;j++){
				System.out.print(" ");
			}
			for(int k=1;k<=i-1;k++){
				System.out.print("* ");
			}
			System.out.print("*");
			for(int j=1;j<=5-i;j++){
				System.out.print(" ");
			}
			System.out.println();
		}
			
	//下半部分图形
		for(int i=1;i<=4;i++){
			for(int j=1;j<=i;j++){
				System.out.print(" ");
			}
			for(int k=1;k<=4-i;k++){
				System.out.print("* ");
			}
			System.out.print("*");
			for(int j=1;j<=i;j++){
				System.out.print(" ");
			}
			System.out.println();	
		}			
	}
}

 

 

总结和建议

这种运用程序流程控制的方法来打印图形是一种常见类型的题目。有还有比这道题更加复杂的,但是万变不离其宗,只要做到两点即可。第一,要分析出每层循环的用意,你为什么要构造这个循环,第二分析出图形与循环之间的规律。