三角形、菱形、空心菱形打印玄学规律
一、直角三角形
图一
如图所示,设其总行数为n,即n=3
设其对应的行数、列数为i、j
即:第一行有1个“”,表示为i=1,j=1;
第二行有2个“**”,表示为i=2,j=2;
第三行有3个“***”,表示为i=3,j=3。 如下图所示:
所以综上所述i、j之间的规律为i=j,所以用for循环嵌套,实现代码如下:
for(int i=1;i<=3;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
划重点:j<=i
二、倒直角三角形
图二
如图所示,设其总行数为n,即n=3
设其对应的行数、列数为i、j
即:第一行有3个“***”,表示为i=1,j=3;
第二行有2个“**”,表示为i=2,j=2;
第三行有3个“”,表示为i=3,j=1。 如下图所示:
所以综上所述i、j之间的规律为j=n-i+1,又∵ n=3,∴ j=3-i+1
所以用for循环嵌套,实现代码如下:
for(int i=1;i<=3;i++){
for(int j=1;j<=3-i+1;j++){
System.out.print("*");
}
System.out.println();
}
划重点:j<=3-i+1
三、等腰三角形
图三
如图所示,设三角形的总行数为n,即n=3;
设其对应的行、列分别为i、j
即:第一行有1个※,表示为i=1,j=1;
第二行有3个※,表示为i=2,j=3;
第三行有5个※,表示为i=3,j=5。 如图所示:
综上所述,寻找i和j的关系,可以表示为:j=2*i-1
而该图形前面带有空格,前面的空格可视为一个倒三角形(参照图二)结合而成。
所以用for循环嵌套,代码实现如下:
for(int i=1;i<=3;i++){
for(int k=1;k<3-i+1;k++){
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
划重点:j<=2*i-1
四、倒等腰三角形
图四
如图所示,设三角形的总行数为n,即n=3;
设其对应的行、列分别为i、j
即:第一行有5个※,表示为i=1,j=5;
第二行有3个※,表示为i=2,j=3;
第三行有1个※,表示为i=3,j=1。 如图所示:
综上所述,寻找i和j的关系,可以表示为:j=(n-i)*2+1,又n=3,所以j=(3-i)*2+1
而该图形前面带有空格,前面的空格可视为一个倒三角形(参照图二)结合而成。
所以用for循环嵌套,代码实现如下:
for(int i=1;i<=3;i++){
for(int k=2;k<=i;k++){
System.out.print(" ");
}
for(int j=1;j<=(3-i)*2+1;j++){
System.out.print("*");
}
System.out.println();
}
划重点:j<=(3-i)2+1
五、菱形
图五
菱形可由图三和图四拼接组成,所以打印出图五就是将图三和图四的实现代码结合在一起,修改一个数据即可,具体实现代码如下:
for(int i=1;i<=3;i++){
for(int k=1;k<3-i+1;k++){
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
for(int i=1;i<=2;i++){
for(int k=1;k<=i;k++){
System.out.print(" ");
}
for(int j=1;j<=(2-i)*2+1;j++){
System.out.print("*");
}
System.out.println();
}
六、空心菱形
空心菱形是在实心菱形的基础上修改而成的,从图形上看,空心菱形每一行的第一列和最后一列是*,其他的都是空格,所以在实心菱形代码的打印*的for循环中,添加一个if判断, 实现代码如下:
for(int i=1;i<=3;i++){
for(int k=1;k<3-i+1;k++){
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
if(j==1 || j==2*i-1){ //仅在开头和末尾打印*
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
for(int i=1;i<=2;i++){
for(int k=1;k<=i;k++){
System.out.print(" ");
}
for(int j=1;j<=(2-i)*2+1;j++){
if(j==1 || j==(2-i)*2+1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}