引例
上一篇我们说了怎么在编写靠左边的三角形,今天我们来说怎么写靠右边的三角形。
>> 寻找规律
> 1 2 3 4 5 6 7
1 。。。。。。*
2 。。。。。* *
3 。。。。* * *
4 。。。* * * *
5 。。* * * * *
//第一行
for(int j=1 ; j<=6 ; j++){
System.out.print("。");
}
for(int k=1 ; k<=1 ; k++){
System.out.print(" *");
}
System.out.println();
//第二行
for(int j=1 ; j<=5 ; j++){
System.out.print("。");
}
for(int k=1 ; k<=2 ; k++){
System.out.print(" *");
}
System.out.println();
//第三行
for(int j=1 ; j<=4 ; j++){
System.out.print("。");
}
for(int k=1 ; k<=3 ; k++){
System.out.print(" *");
}
System.out.println();
//第四行
for(int j=1 ; j<=3 ; j++){
System.out.print("。");
}
for(int k=1 ; k<=4 ; k++){
System.out.print(" *");
}
System.out.println();
//第五行
for(int j=1 ; j<=2 ; j++){
System.out.print("。");
}
for(int k=1 ; k<=5 ; k++){
System.out.print(" *");
}
System.out.println();
关键部分提取
for(int j=1 ; j<=6 ; j++) //第一行
for(int k=1 ; k<=1 ; k++)
for(int j=1 ; j<=5 ; j++) //第二行
for(int k=1 ; k<=2 ; k++)
for(int j=1 ; j<=4 ; j++) //第三行
for(int k=1 ; k<=3 ; k++)
for(int j=1 ; j<=3 ; j++) //第四行
for(int k=1 ; k<=4 ; k++)
for(int j=1 ; j<=2 ; j++) //第五行
for(int k=1 ; k<=5 ; k++)
有没有发现 k 小于等于的值,正是所在的行数,
而且小于等于的数也真是在改行要打印出来的个数。
而 j 的值和 k 加起来正是列数的总和。
由此规律进行循环嵌套
第一种:靠右的直角三角形
import java.util.Scanner;
class star{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//输入行数
System.out.println("输入行数");
int x = sc.nextInt();
//输入列数
System.out.println("输入列数");
int y = sc.nextInt();
//Triangle(x,y);
inverTriangle(x,y);
}
public static void Triangle(int a,int b){
// l 代表列数
for(int l=1 ; l<=b ; l++){
if(a>=l){
// b-l 等于前面需要打印 。 的个数
for(int j=1 ; j<=b-l ; j++){
System.out.print("。");
}
// l 的当前值为所在的行数及要打印出来 * 的个数
for(int k=1 ; k<=l ; k++){
System.out.print(" *");
}
System.out.println();
}
}
}
}
输入行数
9
输入列数
10
。。。。。。。。。 *
。。。。。。。。 * *
。。。。。。。 * * *
。。。。。。 * * * *
。。。。。 * * * * *
。。。。 * * * * * *
。。。 * * * * * * *
。。 * * * * * * * *
。 * * * * * * * * *
第二种:靠右的倒三角型
public static void inverTriangle(int a,int b){
for(int l=b ; l>=1 ; l--){
if(a>=l){
// b-l 等于前面需要打印 。 的个数
for(int j=b-l ; j>=1 ; j--){
System.out.print("。");
}
// l 的当前值为所在的行数及要打印出来 * 的个数
for(int k=l ; k>=1 ; k--){
System.out.print(" *");
}
System.out.println();
}
}
}
输入行数
5
输入列数
6
。 * * * * *
。。 * * * *
。。。 * * *
。。。。 * *
。。。。。 *
第三种:对称三角形
1 2 3 4 5 6 7 8 9
1 . . . . * . . . .
2 . . . * * * . . .
3 . . * * * * * . .
4 . * * * * * * * .
5 * * * * * * * * *
假如要打印如上的菱形
*/
//第一行
for(int j=1 ; j<=9/2 ; j++){
System.out.print(" .");
}
for(int i=1 ; i<=(9/2+1)-9/2 ; i++){
System.out.print(" *");
}
for(int q=1 ; q<=0 ;q++){
System.out.print(" *");
}
for(int k=9/2+2 ; k<=9 ; k++){
System.out.print(" .");
}
System.out.println();
//第二行
for(int j=1 ; j<=9/2-1 ; j++){
System.out.print(" .");
}
for(int i=1 ; i<=(9/2+1)-(9/2-1) ; i++){
System.out.print(" *");
}
for(int q=1 ; q<=1 ;q++){
System.out.print(" *");
}
for(int k=9/2+3 ; k<=9 ; k++){
System.out.print(" .");
}
System.out.println();
//第三行
for(int j=1 ; j<=9/2-2 ; j++){
System.out.print(" .");
}
for(int i=1 ; i<=(9/2+1)-(9/2-2) ; i++){
System.out.print(" *");
}
for(int q=1 ; q<=2 ;q++){
System.out.print(" *");
}
for(int k=9/2+4 ; k<=9 ; k++){
System.out.print(" .");
}
System.out.println();
//第四行
for(int j=1 ; j<=9/2-3 ; j++){
System.out.print(" .");
}
for(int i=1 ; i<=(9/2+1)-(9/2-3) ; i++){
System.out.print(" *");
}
for(int q=1 ; q<=3 ;q++){
System.out.print(" *");
}
for(int k=9/2+5 ; k<=9 ; k++){
System.out.print(" .");
}
System.out.println();
//第五行
for(int j=1 ; j<=9/2-4 ; j++){
System.out.print(" .");
}
for(int i=1 ; i<=(9/2+1)-(9/2-4) ; i++){
System.out.print(" *");
}
for(int q=1 ; q<=4 ;q++){
System.out.print(" *");
}
for(int k=9/2+6 ; k<=9 ; k++){
System.out.print(" .");
}
System.out.println();
}
关键语句提取:
(1)for(int j=1 ; j<=9/2-0 ; j++) //第一行
(2)for(int i=1 ; i<=(9/2+1)-(9/2-0) ; i++)
(3)for(int q=1 ; q<=0 ;q++)
(4)for(int k=9/2+2 ; k<=9 ; k++)
(1)for(int j=1 ; j<=9/2-1 ; j++) //第二行
(2)for(int i=1 ; i<=(9/2+1)-(9/2-1) ; i++)
(3)for(int q=1 ; q<=1 ;q++)
(4)for(int k=9/2+3 ; k<=9 ; k++)
(1)for(int j=1 ; j<=9/2-2 ; j++) //第三行
(2)for(int i=1 ; i<=(9/2+1)-(9/2-2) ; i++)
(3)for(int q=1 ; q<=2 ;q++)
(4)for(int k=9/2+4 ; k<=9 ; k++)
(1)for(int j=1 ; j<=9/2-3 ; j++) //第四行
(2)for(int i=1 ; i<=(9/2+1)-(9/2-3) ; i++)
(3)for(int q=1 ; q<=3 ;q++)
(4)for(int k=9/2+5 ; k<=9 ; k++)
(1)for(int j=1 ; j<=9/2-4 ; j++) //第五行
(2)for(int i=1 ; i<=(9/2+1)-(9/2-4) ; i++)
(3)for(int q=1 ; q<=4 ;q++)
(4)for(int k=9/2+6 ; k<=9 ; k++)
对比前面的靠左,靠右三角形:
你会发现,
左半边输出 * 的部分就是靠右的直角三角形 :第(1)(2)句
右半边输出 * 的部分就是靠右的倒直角三角形 :第(3)(4)句
对上面语句进行进一步抽象
(1)for(int j=1 ; j<=(列/2-(当前行-1)) ; j++)
(2)for(int i=1 ; i<=(列/2+1)-(列/2-(当前行-1)) ; i++)
(3)for(int q=1 ; q<=(当前行-1) ;q++)
(4)for(int k=列/2+当前行+1 ; k<=列 ; k++)
把行和列带入,进行嵌套循环
public static void sanjiao(int a,int b){
for(int n=1 ; n<=a ;n++){
for(int j=1 ; j<=b/2-(n-1) ; j++){
System.out.print(" .");
}
for(int i=1 ; i<=(b/2+1)-(b/2-(n-1)) ; i++){
System.out.print(" *");
}
for(int q=1 ; q<=(n-1) ;q++){
System.out.print(" *");
}
for(int k=b/2+(n+1) ; k<=b ; k++){
System.out.print(" .");
}
System.out.println();
}
}
输入行数:
5
输入列数:
9
. . . . * . . . .
. . . * * * . . .
. . * * * * * . .
. * * * * * * * .
* * * * * * * * *