空心菱形和数字金字塔打印

****使用java打印空心菱形和数字金字塔****
package report;

import java.util.Scanner;

public class Test3 {

	/**
	 * 空心菱形和数字金字塔打印
	 * 
	 * 分析:从简单到复杂,找规律
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		//demo1();
		//demo2();
		//demo3();
		//demo4();
		//demo5();
		//打印一个空心菱形
		/*
				    *
				   * *
				  *   *
				 *     *
				*       *
				 *     *
				  *   *
				   * *
				    *
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("打印出一个空心菱形");
		int n = sc.nextInt();
		
		for (int i = 1; i <= n; i++) {			 	//i表示空心菱形上半部分行数;类似于金字塔行数
			for (int k = 1; k <= n - i; k++) {	 	//k表示每行"*"号前面的空格数
				System.out.print(" ");
			}
			for (int j = 1; j <= (2 * i) - 1; j++) {	//j表示每行要打印的"*"号
				if (j == 1 || j == (2 * i) - 1) {
					System.out.print("*");			//如果要打印的"*"是第一个或最后一个则打印出来
				} else {
					System.out.print(" ");			//如果要打印的"*"不是第一个或最后一个则打印空格
				}
			}
			System.out.println();
		}
		 //以上打印出来的是空心菱形的上半部分
		
		for (int i = 1; i <= n - 1; i++) {			//空心菱形下半部分的行数为n-1行;比如上半部分4行,则下半部分为3行才能构成菱形
			for (int k = 1; k <= i ; k++) {			//每行空格数
				System.out.print(" ");
			}
			for (int j = 1; j <= 2 * (n - i) - 1; j++) {// 下半部分每行总的"*"数
				if (j == 1 || j == 2 * (n - i) - 1) 	// 如果"*"处在第一和最后一位则打印出来
				{
					System.out.print("*");
				} else
					System.out.print(" "); 				// 如果"*"不是处在第一和最后一位则打印出空格
			}
			System.out.println();
			
		}
	}
	
		
		
		
	

	private static void demo5() {
		//打印一个空心金字塔
		/*
			      		*
					   * *
					  *   *
					 *     *
					*********
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("打出一个完整的金字塔(每个*号之间含有空格)");
		int n = sc.nextInt();
		
		for(int i = 1; i <= n; i++){
			for (int k = 1; k <= (n - i); k++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= (2 * i) - 1; j++) {
				if (i == 1 || i == n) { 	// 第一行和最后一行还是打出(2*i)-1个*
					System.out.print("*");
				} else if (j == 1 || j == (2 * i) - 1) {
					System.out.print("*"); // 打印每行的第一个*和最后一个*
				} else {
					System.out.print(" ");
				}
				
			}
			System.out.println();
		}
	}

	private static void demo4() {
		//打印倒立金字塔(每个*号之间含有空格(美观))
		/*
				 	* * * * * * * * * 
					  * * * * * * * 
					    * * * * * 
					      * * * 
					        * 
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("打出一个完整的金字塔(每个*号之间含有空格)");
		int n = sc.nextInt();
		
		for (int i = n; i >= 1; i--) {
			for (int k = 2 * (n - i); k >= 1; k--) {
				System.out.print(" ");
			}
			for (int j = (2 * i) - 1; j >= 1; j--) {
				System.out.print("*");
				System.out.print(" ");
			}
			System.out.println();
		}
	}

	private static void demo3() {
		//打印完整金字塔(每个*号之间含有空格(美观))
		/*
							*         
					      * * * 
					    * * * * * 
					  * * * * * * * 
					* * * * * * * * * 
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("打出一个完整的金字塔(每个*号之间含有空格)");
		int n = sc.nextInt();
		
		for(int i = 1; i<= n; i++){
			//还是找每行第一个*的左边空格数与行数的规律2*(n-i)
			for (int k = 1; k <= 2 * (n - i); k++) {
				System.out.print(" ");
			}
			for(int j = 1; j <= (2 * i) - 1; j++){
				System.out.print("*");
				System.out.print(" ");//加上这一行,调整空格
			}
			System.out.println();
		}
	}

	private static void demo2() {
		//打印完整金字塔(每个*号之间没有空格)
		/*
						*     
					   ***
					  *****
					 *******
					*********
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("打出一个完整的金字塔(每个*号之间没有空格)");
		int n = sc.nextInt();
		
		//分析:要找出每行第一个*距离最左边的距离,假设有n行,那么第一行距离最左边的距离就是n-1,第二行n-2
		//i控制行数    j控制*  k控制空格
		for (int i = 1; i <= n; i++) {
			for (int k = 1; k <= n-i; k++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= (2 * i) - 1; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

	private static void demo1() {
		//打印半个金字塔
		/*
				*
				**
				***
				****
				*****
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入金字塔的行数:");
		int n = sc.nextInt();
		
		for(int i = 1; i <= n; i++){//从1开始
			for (int j = 1; j <= i; j++) {
				System.out.print("*");//这里一定要是print 不要换行 才能形成半个金字塔
			}
			System.out.println();
		}
	}

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值