java打印正金字塔,倒金字塔和“水影”金字塔

                                              --------原创文章,若要转载,请注明出处

  小小少年
   闲来无事,想起自己初学java的时候做的经典的无非就是打印出一些有意思的图形,心血来潮自己就写了这么一个打印金字塔的demo,自己回顾一下当初的感受,同时也  分享给初学java的同道中人,一起来培养编程的兴趣<(^-^)>。
  金字塔图案
  1,问题分析
  我们都知道,打印输出的时候,都是从最左端输出,而这里,第一个星号是在中间。这实际是因为星号之前有很多空格。当我们使用问号来表示空格,实际的输出效果应该是图1.2的形式。
              1.1                1.2
  从图中分析,我们可以看到本次打印出的金字塔有5行,每一行都会打印出几个空格,然后再打印出几个★号,这样我们就知道该如何确认程序的框架了。
      public static void Triangle(){
        for(int i = 1;i <= 5;i++){    //循环5次,打印5行
                        //打印空格数
                        //打印★数
          System.out.pringln();      //打印出行数
        }
      }
  现在我们知道了需要的的行数,那么接下来我们需要却认定空格数和★数有多少,我们来看它的规律。
2,寻找空格和★号的规律。

  从图中,我们可以发现:第1行的空格为4个,第2行是3个,第3行是2个,……,每行依次递减,直至最后一行空格数为0;而星号数目是第1行是1个,第2行是3,第3行是5,……,每行依次递增2,直至最后一行星号数为9。总结数据,我们可以得到表1.1所示的规律。

空格和星星的规律
行数 空格数 星星数
1 5-1  1*2-1 
2 5-2  2*2-1 
3 5-3   3*2-1
4 5-4   4*2-1
5 5-5   5*2-1
规律  依次减1  5-行数  依次加2  行数*2-1 

  根据图中我们可以发现这种规律,那么接下来是不是就简单了。

3,确定空格数

  由于每行空格数有着“5–行数”的规律。所以在第i行的时候,空格数就为5–i。所以我们只要把5–i个空格打印出来即可。

    

      public static void Triangle(){
        for(int i = 1;i <= 5;i++){    //循环5次,打印5行
           for(int j = 1;j <= 5-i;j++){
              System.out.print(" ");     //打印空格数
           }             
 
                        //打印★数
          System.out.pringln();      //打印出行数
        }
      }
  注意打印空格数的时候不要输成了println();这样会换行的。
 
4,打印星星数
 
  由于每行星号数有着“行数*2–1”的规律。所以在第i行的时候,星号数就为2*i–1。所以我们只要把2*i–1个星号打印出来即可。
      

      public static void Triangle(){
        for(int i = 1;i <= 5;i++){    //循环5次,打印5行
           for(int j = 1;j <= 5-i;j++){
              System.out.print(" ");     //打印空格数
           }             
           
           for(int k = 1; k <= 2 * i - 1;k++ ){
              System.out.print("★");    //打印★数
           }
                        
            System.out.pringln();      //打印出行数
          }
        }
 
  OK,程序到此分析完毕,而我们的正金字塔也打印出来了,我回顾了,你懂了吗?o( ̄▽ ̄)d
  
  正金字塔的思路就是这样,那么对应的倒金字塔的思路与此如出一辙,我就不在此一一写了,相信聪明的你能够很好的解决的,我就单纯的把倒金字塔空格和星星数的规律和我写的一个demo放在下面吧。
 
      

行数 空格数 星星数
1 0 1-1 9 5*2-1
2 1 2-1 7 4*2-1
3 2 3-1 5 3*2-1
4 3 4-1 3 2*2-1
5 4 5-1 1 1*2-1
规律 依次递增1 行数-1 依次递减2 行数*2-1(反向)

  

  ****哒哒****:关于菱形,大家而已参考我的随笔 javaScript打印正倒直线 来做哦。O(∩_∩)O嗯!
  我的例子
  1,下面是我写的一个demo,大家可以参考看看哦。

package com.javase.demo;

import java.util.Scanner;

    /**
    * 金字塔
    * @author Mr.Zhang
    *
    */
    public class Pyramid {

      static Scanner input = new Scanner(System.in);
    /**
    * *****打印金字塔*****
    * 1,确定金字塔行数
    * 2,确认空格数
    * 3,确认星星数
    * @param args
    */
    public static void main(String[] args) {

      entrance();

    }

    /**
    * 入口项
    */
    public static void entrance() {
      System.out.println("请选择(0--正金字塔,1--倒金字塔,2--菱形金字塔)");
      String select = input.nextLine();

      if(isNumber(select)){
        int selectInt = Integer.parseInt(select);

        switch(selectInt){
          case 0:
            uprightPyramid();
            break;
          case 1:
            fallPyramid();
            break;
          case 2:
            System.out.println("该功能尚未完善!");
            break;
          default:
            System.out.println("请输入正确的选项!");
            entrance();
            break;
        }
      }else if(!select.equals(0) || !select.equals(1) || !select.equals(2)){
        nullSuccess();
      }
    }

    /**
    * 打印正金字塔
    * @param input
    */
    public static void uprightPyramid() {
      System.out.println("请输入行数:");
      String row = input.nextLine();

      if(isNumber(row)){
        int rows = Integer.parseInt(row);
        for(int i = 1;i <= rows;i++){ //循环输入的行数,

          for(int j = 1;j <= rows - i;j++){ //输出循环每行的空格
            System.out.print(" ");
          }

          for(int k = 1;k <= 2 * i - 1;k++){ // 输出循环每行的★
            System.out.print("★");
          }

          System.out.println();
        }
          System.out.println("打印完成,线程结束");
      }else{
        nullSuccess();
      }

    }
    /**
    * 打印倒金字塔
    */
    public static void fallPyramid(){
      System.out.println("请输入行数:");
      String row = input.nextLine();
      if(isNumber(row)){
        int rows = Integer.parseInt(row);

        for(int i = rows;i >= 1;i--){
          for(int j = 0;j < rows-i;j++){ //打印空格数
            System.out.print(" ");
          }

          for(int k = 0;k < i * 2 - 1;k++){ //打印★数
            System.out.print("★");
          }

          System.out.println();
        }

        System.out.println("打印完成,线程结束");
      }else{
        nullSuccess();
      }

    }

    /**
    * 判断是否为数字
    * @param str
    * @return
    */
    public static boolean isNumber(String str){
        boolean ok = false;
        if(null != str && str.matches("^[0-9]")){
          return true;
        }
      return ok;
    }

    /**
    * 调用错误结果
    */
    public static void nullSuccess(){
      System.out.println("您输入的不是数字,一遍浪去,不听话的孩子!");
    }

}

java打印正金字塔,倒金字塔和“水影”金字塔的更多相关文章

  1. Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...

  2. Java打印金字塔问题

    Java打印金字塔问题 public class 金字塔问题 { // //普通金字塔 // public static void main(String[] args) { // //先打印4层 / ...

  3. java实现打印正三角,倒三角

    正三角代码: package BasicType; /** * 封装一个可以根据用户传入值来打印正三角的方法 * @author Administrator */ public class Enme ...

  4. JavaScript打印正倒直线

    做了一个作业,用JavaScript打印正倒直线,突然觉得自己还是逻辑有待加强训练啊 document.write("<h3>打印倒正金字塔直线</h3>" ...

  5. 关于这两天研究Java打印pdf方法的记录

    这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例 ...

  6. Java打印

    Java打印 import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Gra ...

  7. Java 打印程序设计实例

    3.1 打印文本 3.1.1 应用场景 假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印 54 行,如何实现呢? 3.1.2 解决方法 基本思路如下:首 ...

  8. Java打印整数的二进制表示(代码与解析)

    Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)&g ...

  9. Java中正负数的存储方式-正码 反码和补码

    Java中正负数的存储方式-正码 反码和补码 正码 我们以int 为例,一个int占用4个byte,32bits 0 存在内存上为 00000000 00000000 00000000 0000000 ...

随机推荐

  1. CSS学习笔记:transition

    CSS3的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击.获得焦点.被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值. 1.transit ...

  2. 2.3 LINQ查询表达式中 使用select子句 指定目标数据

    本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...

  3. 我的vi/vim配置文件

    位于/etc/vim/的vimrc " All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by & ...

  4. [LeetCode] ZigZag Conversion [9]

    称号 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...

  5. 【Android开发日记】妙用 RelativeLayout 实现3 段布局

    在设计过程中,我们经常会遇到这样的需求: 把一条线3控制,左对齐左控制,右侧控制右对齐,中间控制,以填补剩余空间. 或者一列内放3个控件,上面的与顶部对齐,以下的沉在最底部,中间控件是弹性的.充满剩余 ...

  6. 运行jar包

    windos下,打开dos命令cmd然后cd 你的路径(比如E:/新建文件夹) linux下,打开终端cd 到你的路径( 然后输入java -jar 要运行的jar.jar

  7. ArcGIS 10.1 发布使用ArcEngine自定义的GP服务

    1. 新建立GP模型 在VS2010中新建一个普通的程序及,引入ArcEngine相关的dll.在该DLL中定义一个或多个GP类和一个GP工厂类.GP类要继承IGPFunction2接口,GP工厂类要 ...

  8. C# 学习笔记2 C#底层的一些命令运行

    C#在DCP中运行的方法: 1.转到相应的目录 cd d:\1 2.输入csc /target:exe 2.cs 或者 csc /t:exe 2.cs 或者 csc 2.cs 在里边引用外部程序集的方 ...

  9. Linux : fedora 安装 vnc server

    Linux配置VNC服务 安装VNC服务端 #yum install vnc-server 配置VNC服务参数文件 编辑vncservers文件追加如下 #vi /etc/sysconfig/vncs ...

  10. Jackson 格式化日期问题

    Jackson 默认是转成timestamps形式的,如何使用自己需要的类型, 解决办法: 1.在实体字段上使用@JsonFormat注解格式化日期 @JsonFormat(locale=" ...