for循环输出空心的菱形

Java实例 专栏收录该内容
28 篇文章 2 订阅

一.实例说明:

本实例在输出菱形的基础上加大了难度,输出空心的菱形图案。在等级考试与公司面试时也出现过类似题目,实际目的在于掌握for循环的嵌套使用。

二.设计过程:

像这种复杂问题我们也可以先从简单处着手,如果要打印空心菱形,可以沿着“金字塔——>空心金字塔——>空心菱形”这一思路进行。实现如下:

(一)金字塔

1.需求:在控制台打印一个由5行“*”组成的金字塔

2.分析:

首先行数5行是确定的,列数是不确定的。

第一行:       i = 0;       i < 5;       j = 0;       j < 4;       4个空白

                                                 k = 0;      k < 1;      1个星号

第二行:       i = 1;       i < 5;       j = 0;       j < 3;       3个空白

                                                 k = 0;      k < 3;      3个星号

第三行:       i = 2;       i < 5;       j = 0;       j < 2;       2个空白

                                                 k = 0;      k < 5;       5个星号

                                        ……

由以上分析可知,每行空白的个数为 j < (5-1-i),每行星号的个数为 k < 2*i+1。

3.实例:

class Demo1{
	public static void main(String[] args){
		for(int i = 0;i < 5;i++){	//i控制金字塔行数
			for(int j = 0;j < (5-1-i);j++){//j控制每行"*"前面的空格数
				System.out.print(" ");
			}
			for(int k = 0;k < (2*i+1);k++){	//k控制要打印的"*"的个数
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

4.运行结果如下图所示:


(二)镂空金字塔

1.需求:在控制台上打印镂空金字塔。

2.分析:

镂空金字塔与完整金字塔比较,可以看出除了金字塔的各个边上是"*"号外,金字塔的内部全是用空格代替了“*”号。因此可以在打印每行的"*"号时判断是不是第一个“*”或者最后一个"*",如果不是则用空格替换掉。

3.实例:

class Demo2{
	public static void main(String[] args){
		for(int i = 0;i < 5;i++){	//i控制金字塔行数
			for(int j = 0;j < (5-1-i);j++){//j控制每行"*"前面的空格数
				System.out.print(" ");
			}
			for(int k = 0;k < (2*i+1);k++){	//k控制要打印的"*"的个数
				if(i == 0||i==4){//如果是第一行或最后一行则将"*"全部打印
					System.out.print("*");
				}else if(k == 0||k == (2*i)){//如果要打印的"*"是第一个或最后一个则打印出来
					System.out.print("*");
				}else{//如果要打印的"*"不是第一个或最后一个则打印空格
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}

4.运行结果如下图所示:


(三)空心菱形

1.需求:在控制台上打印出空心菱形。

2.分析:

空心菱形可以看作两部分组成:上半部分和下半部分。而这两部分均属于空心金字塔类型。

3.实例:

class Demo3{
	public static void main(String[] args){
		for(int i = 0;i < 5;i++){	//i表示空心菱形上半部分行数;类似于金字塔行数
			for(int j = 0;j < (5-1-i);j++){//j控制每行"*"前面的空格数
				System.out.print(" ");
			}
			for(int k = 0;k < (2*i+1);k++){	//k控制要打印的"*"的个数
				if(i == 0){//如果是第一行则将"*"全部打印
					System.out.print("*");
				}else if(k == 0||k == (2*i)){//如果要打印的"*"是第一个或最后一个则    								//打印出来
					System.out.print("*");
				}else{//如果要打印的"*"不是第一个或最后一个则打印空格
					System.out.print(" ");
				}
			}
			System.out.println();
		}//以上打印的是空心菱形的上半部分。
		for(int i = 0;i < 4;i++){	//空心菱形的下半部分的行数比上半部分少一行;比如上	    					//半部分是5行,下半部分为4行才能构成菱形
			for(int j = 0;j < (i+1);j++){//j控制每行"*"前面的空格数
				System.out.print(" ");
			}
			for(int k = 0;k < 2*(4-i)-1;k++){	//k控制要打印的"*"的个数
				if(i == 3){//如果是最后一行则将"*"全部打印
					System.out.print("*");
				}else if(k == 0||k == 2*(3-i)){//如果要打印的"*"是第一个或最后一个	      							//则打印出来
					System.out.print("*");
				}else{//如果要打印的"*"不是第一个或最后一个则打印空格
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}

4.运行结果如下图所示:






©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值