利用二重循环输出图形
可以先观察图形的变化规律,从前两个图形可以看出,这是一个等差数数列,等差数列的公式为:
y=id+x y=x-id;
//注意我们使用的等差数列公式:y=i*d+x y=x-i*d;
//下面输出第一个图形
//注意第一个图形的规律,是等差为1的等差数列,一共有五行,
//用第一行数值代入求出x 1=i*1+x => x=0,下面开始写代码
//外循环控制行数,内循环控制列数,
for(int i = 1; i <= 5; i++){
//下面输出*
for(int j = 1;j <=i ; j++ ){
System.out.print("*");
}
//每次输出完一行*后要换行
System.out.println();
}
//下面输出第二个图形
//第二个图形与第一个图形相反
//规律是:等差为1的递减等差数列
//利用第一行已知数据,求出x, 5=x-1*1 => x=6 => y=6-i
for(int i = 1; i <= 5 ; i++){
//j控制输出*的个数
for(int j = 1; j <= 6-i ; j++){
System.out.print("*");
}
System.out.println();
}
//下面输出第三个图形
//观察一下,第三个图形有什么规律
//是一个金字塔的形状,仔细观察可以看成是两个图形拼接成的
//只不过第一个图形输出的是空格,图形和第一个我一样
//空格是等差为1的递减等差数列,4 3 2 1 0,借鉴第二个图形的y=5-i
//第二个就是金字塔图形,输出规律是以等差为2的等差数列
//1 3 5 7 9
//求出*的x:1=1*2+x => x=-1 => y=i*2-1
for(int i = 1; i <= 5; i++ ){
for(int j= 1;j <= 5-i){
//先输出空格
System.out.print(" ");
}
System.out.println();
//再输出*
for(int j =1; j <= 2*i-1; j++){
System.out.print("*");
}
System.out.println();
}
//第四个图形
//第四个图形就是第三个图形倒过来
//先输出空格 规律以等差为1的递增等差数列是:0 1 2 3 4
//0=1*1+x => y=i-1
//再输出*
//*的规律是以等差为2的递减等差数列:9 7 5 3 1
//9=x-1*2 =>y=11-2*i
for(int i = 1; i <=5 ;i++ ){
for(int j = 1; j <=i-1; j++){
System.out.print(" ");
}
System.out.println();
for(int j = 1; j <= 11-2*i ; j++){
System.out.print("*");
}
System.out.println();
}
//第五个图形 菱形
//这个图形出现了新的变化,一共9行,先增后减
//可以用绝对值来解决这个问题
//还是看成两个图形
//第一个空格图形,先减后增,前四行递减,后四行递增
//i取值-4-3-2-1 0 1 2 3 4
// 4 3 2 1 0 1 2 3 4
//y=x+|i*d| => y=|i*d|
//第二个*图形,先增后减,前四行递增,后四行递减
//i取值-4-3-2-1 0 1 2 3 4
// 1 3 5 7 9 7 5 3 1
//从0开始理解套公式
//y=x-|-4*2| => y=9-|2*d|
//行数从-4开始
for(int i = -4; i <= 4; i++){
//列数从1开始,由公式控制长度
for(int j = 1;j<=Math.abs(i);j++){
System.out.print(" ");
}
System.out.println();
for(int j = 1; j <= 9-2*Math.abs(i);j++){
System.out.print("*");
}
System.out.println();
}
//第六个图形 沙漏
//看成两个图形,
//空格图形,共有9行,先增后减
//i取值-4-3-2-1 0 1 2 3 4
// 0 1 2 3 4 3 2 1 0
//看下半个图形以等差为1的递减等差数列
//4=x-0*1 =>y=4-|i|
//*图形,先减后增
//i取值-4-3-2-1 0 1 2 3 4
// 9 7 5 3 1 3 5 7 9
//下半个图形以等差为2的递增等差数列
//1=x+2*0 => y=1+|2*i|
for(int i = -4;i <= 4;i++){
for(int j = 1; j <=4-Math.abs(i);j++){
System.out.print(" ");
}
System.out.println();
for(int j = 1; j <=1+2*Math.abs(i);j++){
System.out.print("*");
}
System.out.println();
}