java实现“*”的多种形状排列(超详细,提高篇)

引例

上一篇我们说了怎么在编写靠左边的三角形,今天我们来说怎么写靠右边的三角形。

>> 寻找规律
> 		    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
 . . . . * . . . .
 . . . * * * . . .
 . . * * * * * . .
 . * * * * * * * .
 * * * * * * * * *

第四种:菱形

猜你喜欢

转载自blog.csdn.net/zhuyin6553/article/details/103159868