正在看这篇文章的你,肯定是个爱学习的人儿!奥利给!
最近有同学看了我写的Java第十三篇博文:打印九九乘法表,产生了这样的疑惑:
根据这篇文章,我可以打印实心菱形和空心菱形吗?
答案:肯定能实现,我们一起来看看叭。
1.打印实心菱形
package study;
/**
*
* @author 重工黑大帅
* @date 2020.2.5
* @see everyone
* 实现功能:打印实心菱形
*
*/
public class Study{
public static void main(String args[ ]) {
int i,j,k; //实例变量可以不赋初值,我建议还是赋初值,养成好习惯,变量i代表代表图形的行数,变量j代表图形的个数,变量k用来控制空格数
String ch="*"; //定义图形形状
System.out.println(); //控制台打印图形间隔一行
//实心菱形上半部分
for(i=1;i<=4;i++){ // 控制图形行数
for(k=1;k<=4-i;k++) { //控制空格数
System.out.print(" ");
}
for(j=1;j<=i;j++){ //控制"*"个数
System.out.print(ch+" ");
}
System.out.println(); //换行
}
//实心菱形下半部分//
for(i=1;i<=3;i++){ //控制图形行数
for(k=1;k<=i;k++) { // 控制空格数
System.out.print(" ");
}
for(j=1;j<=4-i;j++){
System.out.print(ch+" ");//控制"*"个数
}
System.out.println(); //换行
}
}
}
结果显示:
过程分析:
打印这类图形,我们首先就要想到用嵌套for循环来实现,这类图形的打印也是很多比赛和面试喜欢拿来用的,大家平时多积累,多练习,欢迎留言交流,共同进步。其次,常规套路,三个变量:行数,列数,图形个数(i,j,k),虽然看着没几行代码,但要去实现还是需要经过思考,最好的办法就是多敲多练习。
2.打印空心菱形
说到空心菱形,就是把上述结果中图形的中心变成空白,如下图:
相对于上述打印实心菱形来说,打印空心菱形稍微有一点高度的提升,但只要你想通了,注重细节,我相信你也可以快速掌握的,话不多说,上菜:
//打印空心菱形
public class Study{
public static void main(String args[ ]) {
int i,j,k; //实例变量可以不赋初值,我建议还是赋初值,养成好习惯,变量i代表代表图形的行数,变量j代表图形的个数,变量k用来控制空格数
String ch="*"; //定义图形形状
//打印上半部分图形
for(i=1;i<=4;i++){ // 确定行数
for(k=1;k<=4-i;k++) { //控制空格数
System.out.print(" ");
}
for(j=1;j<=i;j++){ // 控制"*"数量
if(j==3||j==4) {
continue;
}
System.out.print(ch+" ");
if(i==3) {
System.out.print(" ");
}
if(i==4) {
System.out.print(" ");
}
}
System.out.println();
}
for(i=1;i<=3;i++){
for(k=1;k<=i;k++) {
System.out.print(" ");
}
for(j=1;j<=4-i;j++){
//这儿是核心
if(j==2 && i==1) {
System.out.print(" "+ch);
break;
}
System.out.print(ch+" ");
}
System.out.println();
}
}
}
结果显示:
过程分析:
在我打印空心菱形之前,我也模仿自己在不清楚的情况下,打印出的图形是这样的:(以下图形是错误的,仅供学习参考)
图1
图2
图3
上述三种图形都是错误的,在分析倒着打印三角形的时候,我发现变量j的值都是从1开始的,那每次都会执行到j=2,这就有点难受:我如果对j=2这一步进行操作,第二行没问题,但第三行打印出来的图形就会错位,如下图:
我如果调整第三行,那第二行的图形也会受到影响,那怎么办呢?这个时候我就行到了变量i,我来改变i的值,看看会不会得到我想要的图形,但结果还是没得到我想要的图形,如下图(调整变量i得到的图形):
我沉思了一会,仔细观察了一下程序,变量i和变量j都会经过j=2这个环节,但是变量i的值却不一样,一个是i=1,一个是i=2,那这个时候逻辑与就上场了(等了这么久,终于轮到我上场了!),所以这个时候就可以区别了,问题得到解决,开心叭!
3.打印金字塔三角形
public class Study{
public static void main(String args[ ]) {
int i,j,k; //实例变量可以不赋初值,我建议还是赋初值,养成好习惯,变量i代表代表图形的行数,变量j代表图形的个数,变量k用来控制空格数
String ch="*"; //定义图形形状
System.out.println(); //控制台打印图形间隔一行
//实心菱形上半部分
for(i=1;i<=10;i++){ // 控制图形行数
for(k=1;k<=10-i;k++) { //控制空格数
System.out.print(" ");
}
for(j=1;j<=i;j++){ //控制"*"个数
System.out.print(ch+" ");
}
System.out.println(); //换行
}
}
}
结果显示:
拓展题:
这是留给读者的练习题,看过这篇博客的同学尽量练习,加深印象,不要只会纸上谈兵哈,答案若有需要我会发在留言中。