问题描述:
有一个类Rhombus.java,可以通过main函数显示菱形图案。
1.通过 Scanner 类来获取用户的输入。
2.需要使用嵌套的For语句,并使用System.out。print()来打印字符。
3.菱形图案的边长由Scanner获取的边长来指定。
例如:获取number=4得到如下图形
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
问题分析
由于for循环嵌套只能增或者减。不能增后减、减后增。因此整个菱形问题可以先分为两部分:上部分和下部分。
观察菱形发现输出菱形,是由空格和“*”组成,且成递增(递减)因此又可分为空格部分和“*”部分。按照此思路问题得以解决。
import java.util.Scanner;
public class Rhombus {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入菱形的边长");
int number=sc.nextInt();
//主要分为上下部分;
//每个部分又分为空格部分和*部分
for(int i =1;i<=number;i++)
{
for(int j=1;j<=number-i;j++)
//先打印空格后打印*
//空格个数为number-i
{
System.out.print(" ");
}
for(int k=number-i+1;k<=number+i-1;k++)
//*个数为number+i-1-(number-i+1)个
//number-i+1为*起始位置,number+i-1为结束位置(位置相同则为一个)
{
System.out.print("*");
}
System.out.println();
}
for(int i =number+1;i<2*number;i++)
{
for(int j=1;j<=(i-number);j++)
{
System.out.print(" ");
//空格结束位置后一位就是*起始位置
}
for(int k=(i-number+1);k<3*number-i;k++)
//*位置起始为(i-number+1)截止位置为 3*number-i;
//*数为4*number-2*i+1
//除去中心线外每边的*个数为2*number-i,
//所以截止位置就应该是中心线加上一边*的个数
{
System.out.print("*");
}
System.out.println();
}