打印任意大小的空心三角形(java)

java常用的输出语句有下面三种:

System.out.println();//换行打印,输出之后会自动换行

System.out.print();//不换行打印

System.out.printf();//按格式输出

0x02:输出示例

public classtest {public static voidmain(String []args){

System.out.println(1111);//换行打印,输出后自动换行

System.out.print(1111);//不换行打印

System.out.printf("分数是:%d",88);//按格式输出

此处的白色格子有9个 ,我先打印9个空格 

import java.util.Scanner;//调用扫描器的包,才能够使用输入数字,实现输入一个数 ,输出多行的空心三角形

public class Hollowtriangle//空心三角形的名字
{
 public static void main(String[] args)
{

    Scanner myScanner = new Scanner(System.in); //必须要有的格式,建立一个扫描器,然后往这个扫描器里面输入值
    int num=myScanner.nextInt();

for(int p=0;p<num-1;p++) System.out.print(" ");
 System.out.println("*");
 int i=0,j=0,k=0;

 for(i=1;i<=num;i++)
 {
   
   for(j=1;j<=2*num-1;j++)  //根据观察得到的规律2*num-1,为最后一行,读者可以先画一个三角形,数它的行和列
   {

   if((j==num-i)||(j==num+i))//是根据观察得到的规律, 随着层数每次增加,,*出现的列数总是在(num-i)或者(j==num+i)
    System.out.print("*");
    

    else if(i==num-1&&j>=2&&j<=2*num-2)//我这里是强塞入最后一行的,最后一行同时避开首列和尾列
         System.out.print("*");
    else System.out.print(" ");
    }
    System.out.print("\n");//每行结束换行
     
   }


 }
}




法二: 

import java.util.Scanner;
// 空心金字塔
/*
    *
   * *
  *   *
 *******
 */
public class Stars03 {
    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入你的层数:");
//        int totalLevel = sc.nextInt();
//        int i = 0;//定义变量i作为金字塔层数
//        while (i<totalLevel){
//            int j = totalLevel;//定义变量j=层数,作为当前层要加的空格数量
//            while(j>i){
//                j--;
//                //最后一个空格要开始遍历*号
//                if (j==i){
//                    int k = 0;
//                    //星号个数为等差数列,2n-1
//                    int count = 2*(i+1)-1;
//                    while(k<count){
//                        if (i == totalLevel-1){
//                            System.out.print("*");
//                        }else if (k == 0 || k == count-1){
//                            System.out.print("*");
//                        }else{
//                            System.out.print(" ");
//                        }
//                        k++;
//                    }
//                }else{
//                    System.out.print(" ");
//                }
//            }
//            System.out.println();
//            i++;
//        }
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入总层数:");
        int totalLevel = sc.nextInt();

        for (int i =  1; i <= totalLevel; i++){
            //在输出*之前, 还有输出 对应空格 = 总层数-当前层
            for (int k = 1;k <= totalLevel-i; k++){
                System.out.print(" ");
            }
            //控制打印每层的*个数
            for (int j = 1; j <= 2*i-1;j++){
                if (j == 1 || j == 2 * i - 1 || i == totalLevel){
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }

            }
            System.out.println();
        }
    }
}
public class Stars { 
	//编写一个 main 方法 
	public static void main(String[] args) { 
		/* 
			  * 
			*  * 
		   *    * 
		  ******** 
	
		思路分析 
		化繁为简 
		1. 先打印一个矩形 
		***** 
		*****
		***** 
		***** 
		*****
		
		2. 打印半个金字塔
		* 		//第 1 层 有 1 个* 
		** 		//第 2 层 有 2 个* 
		*** 	//第 3 层 有 3 个* 
		**** 	//第 4 层 有 4 个* 
		***** 	//第 5 层 有 5 个*
		
		3. 打印整个金字塔
		    * 		//第 1 层 有 1 个* 2 * 1 -1 有 4=(总层数-1)个空格 
		   *** 		//第 2 层 有 3 个* 2 * 2 -1 有 3=(总层数-2)个空格 
		  ***** 	//第 3 层 有 5 个* 2 * 3 -1 有 2=(总层数-3)个空格 
		 ******* 	//第 4 层 有 7 个* 2 * 4 -1 有 1=(总层数-4)个空格 
		********* 	//第 5 层 有 9 个* 2 * 5 -1 有 0=(总层数-5)个空格
		
		4. 打印空心的金字塔 [最难的]
		    * 		//第 1 层 有 1 个* 当前行的第一个位置是*,最后一个位置也是* 
		   * * 		//第 2 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是* 
		  *   * 	//第 3 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是* 
		 *     * 	//第 4 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是* 
		********* 	//第 5 层 有 9 个* 全部输出*
		
		先死后活
		5 层数做成变量 int totalLevel = 5;
		*/
		int totalLevel = 20; //层数 
		for(int i = 1; i <= totalLevel; i++) { //i 表示层数 
			//在输出*之前,还有输出 对应空格 = 总层数-当前层 
			for(int k = 1; k <= totalLevel - i; k++ ) { 
				System.out.print(" "); 
			}
			//控制打印每层的*个数 
			for(int j = 1;j <= 2 * i - 1;j++) { 
				//当前行的第一个位置是*,最后一个位置也是*, 最后一层全部 * 
				if(j == 1 || j == 2 * i - 1 || i == totalLevel) { 
					System.out.print("*"); 
				} else { //其他情况输出空格 
					System.out.print(" "); 
				} 
			}
			//每打印完一层的*后,就换行 println 本身会换行 
			System.out.println(""); 
		} 
	} 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值