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. Windows 7的 磁盘管理中,某个磁盘或分区,突然变成只读。

    1.今天突然发现E盘无法创建文件夹.文件,也不可以改,感觉像是变成只读 . 2.我的电脑 -> 计算机管理 -> 存储 -> 磁盘管理,发现E盘下面标记着只读两个字. 3.由于我的E ...

  2. ThinkPad E431/E531 ubuntu 14.04 安装无线网卡驱动

    ubuntu系统装好之后无限网卡驱动并不能用.须要自己下载无线网卡驱动.以下是最简单的方法: sudo apt-get install linux-headers-generic build-esse ...

  3. 【COCOS2DX-游戏开发之三四】cocos2dx 3.0 TableView特殊使用方法:滚动时不能选择等等

    cocos2dx 3.0版本号TableView拍生自ScrollView,经常使用来做滚动列表,有几种特殊使用方法,不知道大家用到过没 要求:1.滚动时不能选中TableCell,非滚动状态才干选中 ...

  4. php学习之路:php在iconv功能 详细解释

    iconv函数库可以完毕各种字符集间的转换,是php编程中必不可少的基础函数库. 使用方法例如以下: $string = "亲爱的朋友欢迎訪问胡文芳的博客.希望给您带来一点点的帮助!&quo ...

  5. nagios 安装和配置(含有nrpe结束)所有 (两)

    二.ndoutils 安装: 1.mysql安装(若未安装) #apt-get install mysql-servermysql-client 2.DBI安装(若未安装) #cd /usr/loca ...

  6. 你是否应该使用一个Javascript MVC框架?

    你是否应该使用一个Javascript MVC框架?本文摘自smashingmagazine的Journey Through The JavaScript MVC Jungle部分内容,希望对大家有帮 ...

  7. String的使用

    String的常用方法 方法 说明 Anchor() 创建html锚 Concat() 把字符串连接起来 indexOf() 查找字符出现的位置 lastIndexOf() 查找最后出现字符 char ...

  8. java UDP网路编程

    大家都知道java中的socket网络编程,而其采用的协议分别有tcp和udp协议两种. 通常的理解tcp协议类似于打电话,udp类似于发短信.前者是线程安全的,但是效率比较低.后者则刚好相反. 今天 ...

  9. iOS基础 - 多媒体

    一.播放视频 iOS提供了叫做MPMoviePlayerController.MPMoviePlayerViewController的两个类,可以用来轻松播放视频 YouTobe就是用MPMovieP ...

  10. noip推荐系列:汽艇[贪心]

    [问题背景] 一天sxc,zsx,wl到gly坐汽艇,本来和其他的人约好了一起去,结果被放了鸽子,3人便只有一人负担x元去坐汽艇(很贵哦).坐了才发现如果汽艇上人多了位置就不宽敞,就不好玩了.而3个人 ...