空心三角形

打印三角形

在这里插入图片描述
先将三角形分成四份,先打印第一部分的空格
带入变量进行思考

//1.先将三角形看作是正方形里的三角形,先打印出第一部分空白
		for (int a = 1;a<=6 ;a++ ) {
			for (int b =6;b>=a ;b-- ) {
				System.out.print(" ");
			}
			//2.再打印正三角的一半
			for (int j=1;j<=a ;j++ ) {
				System.out.print("1");
			}
			//3.再打印另一半
			for (int k=1;k<=a-1 ;k++ ) {//第二个半三角形要比第二个少输出一个不然不尖
				System.out.print("1");
			}
			System.out.println();
			
		}

打印空心三角形

1.先打印一个矩形
ooooo
ooooo
ooooo
ooooo
ooooo

for (int i=1;i<=5 ;i++ ) {
			System.out.println("*****");
		}

2.打印半个三角形
o-------第一层1个 1
oo------第一层2个 1
ooo-----第一层3个 1
oooo----第一层4个 1
ooooo --第一层5个 1
把 i 当成层数,增加一个循环控制每层打印多少个

for (int i=1;i<=5 ;i++ ) {
			for (int j =1;j<=i ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
				System.out.print("*");//不换行
			}
			System.out.println("");//换行
		}

3.打印整个三角形
wwwwo----第一层1个* ----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
wwwooo—第二层3个*----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
wwooooo–第三层5个* ----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
wooooooo-第四层6个*----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
ooooooooo第五层9个*----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格

for (int i=1;i<=5 ;i++ ) {
			for (int k=1;k<=5-i ;k++ ) {
				System.out.print(" ");//打印空格
			}
			for (int j =1;j<=2*i-1 ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
				System.out.print("*");//不换行
			}
			System.out.println("");//换行
		}

4.打印空心三角形
wwwwo----第一层1个* 第一个和最后一个才输出
wwwoso----第二层2个第一个和最后一个才输出
wwossso----第三层2个
第一个和最后一个才输出
wosssssso----第四层2个第一个和最后一个才输出
ooooooooo----第五层9个
第五层全输出

for (int i=1;i<=5 ;i++ ) {
			for (int k=1;k<=5-i ;k++ ) {
				System.out.print(" ");//空格
			}
			for (int j =1;j<=2*i-1 ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
				if (j==1||j==2*i-1||i==5) {//j=1表示当前在第一个位置,=2*i-1表示在最后一个位置(注意=等于就是最后一次内循环),i==5表示在最后一层
					System.out.print("*");//不换行
				}else{
					System.out.print(" ");
				}
				
			}
			System.out.println("");//换行
		}

输出效果
在这里插入图片描述
5.灵活性
将层数使用一个变量表示,就可以随意输出其他大小的三角

int lever = 5;
		for (int i=1;i<=lever ;i++ ) {
			for (int k=1;k<=lever-i ;k++ ) {
				System.out.print(" ");//空格
			}
			for (int j =1;j<=2*i-1 ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
				if (j==1||j==2*i-1||i==lever) {//j=1表示当前在第一个位置,=2*i-1表示在最后一个位置(注意=等于就是最后一次内循环),i==5表示在最后一层
					System.out.print("*");//不换行
				}else{
					System.out.print(" ");
				}
				
			}
			System.out.println("");//换行
		}

比如将层数变成20 效果如下:
在这里插入图片描述

练习:打印一个空心菱形

public class Stars{
	public static void main(String[] args) {
		//打印菱形空心三角
		//(1)先打印出三角前的空白
		int lay = 10;
		for (int a= 1;a<=lay ;a++ ) {
			for (int b=1;b<=lay-a;b++ ) {
				System.out.print(" ");	
			}
			//(2)再打印出三角形
			for (int j=1;j<=2*a-1 ; j++) {
				//(3)添加一个条件只有在第一个和最后一个时才打印*否则打印空白,上半部分就打印好了
				if (j==1||j==2*a-1) {
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}	
			System.out.println();//上半部分的 每输出玩一行就换行
		}
		//(4)再根据下半部分是*号前的空白是慢慢增加,*是慢慢变窄的情况打印下半部分
		for (int c= 1;c<lay ;c++) {
				for (int k = 1;k<=c ;k++ ) {//打印空白
				System.out.print(" ");
			}		
			//(5)再打印出倒空心三角
			for (int p=1;p<=2*(lay-c)-1 ;p++) {
				//(5再添加首尾才输出*号的条件,否则输出空白)
				if (p==1||p==2*(lay-c)-1) {
					System.out.print("*");
				}else{
					System.out.print(" ");

			}
		}

			System.out.println();//下半部分的 每输出玩一行就换行	
		}
	}
}

效果图;
在这里插入图片描述

难点在于发现每行需要打印的星号与层数之间存在怎么样的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值