java的嵌套for循环例子:打印直角三角形、等腰三角形

java的嵌套for循环例子:打印直角三角形、等腰三角形,第1张

1、打印直角三角形
(1) 西南方向的直角三角形

为了便于观察i和j的关系,我们将 i 和 j 放在同一水平面去画,下面的图同理,不再赘述。然后我们发现,关键点在于找到星星和空格的分界点。很明显分界点在j=i的位置,我们只要让j从左到右扫描,扫描到分界点就停止。

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

(2) 东北方向的直角三角形

显然分界点也是j=i的位置。不过这一次我们的j要从右到左扫描,扫描到分界点停止。

for(int i=1; i<=3; i++){
	for(int j=3; j>=i; j--){
		System.out.print("*");
	}
	System.out.println();
}
***
**
*

(3) 东南方向的直角三角形

前面我们是从有星星的位置开始打印,打印到没星星的位置就停止,不用去管空格。
现在星星都在偏右的位置,因此我们要去管空格了。如果我们的j从左到右扫描,思路变成了在分界点之前我们打印空格,在分界点之后我们打印星星。
显然,此时的分界点在于j=4-i。

for(int i=1; i<=3; i++){
	for(int j=1; j<=3; j++){
		if(j < 4-i){
			System.out.print(" ");
		}else{
			System.out.print("*");
		}
	}
	System.out.println();
}
  *
 **
***

(4) 西北方向的直角三角形

显然,此时的分界点也是4-i,j的扫描方向是从左到右。

for(int i=1; i<=3; i++){
	for(int j=1; j<=3; j++){
		if(j <= 4-i){
			System.out.print("*");
		}else{
			System.out.print(" ");
		}
	}
	System.out.println();
}
***
**
*

(5)九九乘法表
九九乘法表就是西南方向的直角三角形。

	//打印九九乘法表
		for(int i=1; i<=9; i++){
			for(int j=1; j<=i; j++){
				System.out.print( i + "x" + j + "=" + (i * j) + "\t");
			}
			System.out.println();
		}
	}
1x1=1
2x1=2   2x2=4
3x1=3   3x2=6   3x3=9
4x1=4   4x2=8   4x3=12  4x4=16
5x1=5   5x2=10  5x3=15  5x4=20  5x5=25
6x1=6   6x2=12  6x3=18  6x4=24  6x5=30  6x6=36
7x1=7   7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49
8x1=8   8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64
9x1=9   9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81

(6)打印等腰三角形

方法一:
这里有个比较巧妙的地方,就是如果我们把星星和后面的一个空格看做整体,问题竟然转换成了《(3)东南方向的直角三角形》,如下图。可以看下代码,除了打印星星的时候加一个空格,其他的都一样。
关键点在于我们要知道:
第一行,星星开始的位置在3,有一个星星(内循环1次)
第二行,星星开始的位置在2,有两个星星(内循环2次)
第三行,星星开始的位置在1,有三个星星(内循环3次)
第n行,星星开始的位置在4-i,有n个星星(内循环n次)

for(int i=1; i<=3; i++){
	for(int j=1; j<=3; j++){
		if(j < 4-i){
			System.out.print(" ");
		}else{
			System.out.print("* ");
		}
	}
	System.out.println();
}
  *
 * *
* * *

方法二:

关键点在于我们要知道:
第一行,星星开始的位置在3,有一个星星(内循环1次)
第二行,星星开始的位置在2,有两个星星(内循环2次)
第三行,星星开始的位置在1,有三个星星(内循环3次)

方法1是j从左到右扫描,如果j从右到左扫描可不可以呢?
j从左到右扫描的话,j是到4-i就停止;
j从右到左扫描的话,因为我们要控制第1行内循环1次,第2行内循环2次,第3行内循环3次,那首先j只能是从3到1变化了。然后我们看上面的图,第一行要先打印2个空格,j从3开始的话,刚好离i的位置也是两步;第二行打印1个空格,j从3开始的话刚好离i的位置也是1步。然后看下面的代码就明白了为什么j小于等于i是个分界点了。
但是很明显从右到左扫描不符合我们正常的思路。但也是种方法吧,这也告诉我们其实打印东南方向的直角三角形也是可以让j从右到左扫描打印出来的,相当于颠倒的思路咯。

for(int i=1; i<=3; i++){
	for(int j=3; j>=1; j--){
		if(j <= i){
			System.out.print("* ");
		}else{
			System.out.print(" ");
		}
	}
	System.out.println();
}
  *
 * *
* * *

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/905573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存