空心菱形

今天做题练手,题目是空心菱形,一开始没什么思路,去网上找了找,发现很难找到讲的通透的,自己现在独立做出来了,记录一下,以备后用。

     *
    * *
   *   *
  *     *
 *       *
*         *
 *       *
  *     *
   *   *
    * *
     *

需求:使用循环语句打印一个10行左右的空心菱形出来。

思路

1平面的菱形,总体上还都是二维图形,二维图形就可以用双层for循环去打印出来

2这个空心菱形,要分成上下两个部分打印

3打印的时候,只需要打印左边空白的和中间空白以及*号就行。

4具体到每一行,实际就是前面的空白是一部分,后面的星号空白星号又是一部分。

这是我编码之前写的思路,看着写的浅显。后来发现里面最负责的是定位,也就是循环语句的边界,为什么要确定边界呢,后面再补充。

1、这种打印的语句,无非都是逐行扫描,一行一行的打印,每一行中的所有数据位,都可以用平面坐标系表示出来(x,y)。

非常类似于打印二维数组,想想二维数组是如何遍历打印的,双层for循环嵌套,但是这里略有不同,不同点在于,这里的“数组元素”是独立的,不是处于同一个数组,你需要一个一个去找规律,但是总体还是使用双层for循环嵌套。

2、具体到一行,你可以发现,如何把一行分割开,这样你就可以加一些条件去控制打印空格还是*星号了。

所以我观察了后发现,首先这个菱形是由两个三角形组成的,一个大一点,一个小一点,所以到时候可以分开去实现,降低复杂度。

3、先看上面的一个三角形,整体来看像是一个空白三角形和有边的三角形组合起来的,那么我的问题就变成了3个,1如何打印这个空三角形,2如何打印旁边的有边三角形,3如何在一行里实现2种三角形的内容。

这是思维逻辑,换成程序逻辑就是,如何在一个for循环(一行内容里)打印两类内容。

4、那么如何让行数和行里面的内容联系起来呢,那么在构思的时候就一定要让外层循环的计数器能够影响到内层循环,也就是内层循环的边界一定要和外界循环计数器有关系,这样就变成了一个存在已知变量,求代数表达式的过程了,具体找规律的过程就按下不表。

把源码贴出来,注释写的很详细了,关于循环边界需要动动脑子思考一下。

package com.chapter.four;
/**
 * 这是4.5 的范例 打印空心菱形
 * 需求打印一个10行的空心菱形(明明有11行啊,为什么都叫10行)
 * 1思路 平面的菱形,总体上还都是二维图形,二维图形就可以用双层for循环去打印出来
 * 2这个空心菱形,要分成上下两个部分打印
 * 3打印的时候,只需要打印左边空白的和中间空白以及*号就行。
 * 具体到每一行,实际就是前面的空白是一部分,后面的星号空白星号又是一部分。
 * @author huxingyue
 *
 */

class Diamond {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Diamond d = new Diamond();
        d.printHollowDiamond(100);
    }
//  打印空心菱形
    void printHollowDiamond(int size){
//      先取到行号
        int lineNum = 0;
        if( size%2 == 0){
        lineNum = size +1;//这是传进来要求的size,对于偶数情况的,变成奇数方便操作
        }
//      打印上半部分,就是打印前6行

        for(int n = 1;n <= lineNum/2+1;n++){
//          打印一行中前面的空白部分

            for(int m = lineNum/2;m > n-1;m--){
                System.out.print(" ");
            }
//          打印中间的星号和空白
            for(int k = 1;k < 2*n;k++){
                if(k==1||k == 2*n-1){//当在头和尾巴的时候打印星号
                    System.out.print("*");
                }else System.out.print(" ");
            }   

            System.out.println("");
        }
//      打印下半部分
        for(int n = 1;n < lineNum/2+1;n++){//打印行数
            for(int m = 1;m < n + 1;m++){//第一行只打印一个空格,
                System.out.print(" ");
            }
//          打印中间的星号和空白
            for(int k = 1; k < lineNum-2*n+1;k++){//半天没拐过来
                if(k == 1||k == lineNum-2*n){
                    System.out.print("*");
                }else System.out.print(" ");
            }

            System.out.println("");
        }
    }
}

如果想打印实心菱形,只需要做一下小改动,和打印空心差不多,甚至简单很多。

Java温故而知新-空心菱形的更多相关文章

  1. Java打印空心菱形

    使用Java打印空心菱形 public static void main(String[] args) { int n = 5; //这里输出菱形的上半部分 for (int i = 1; i < ...

  2. java 打印空心菱形的两种实现

    第一种实现方式: //打印给定行数的空心菱形 public static void draw(int size){ if (size % 2 == 0) //如果是偶数行变为奇数 { size++; ...

  3. java输出空心菱形

    package com.zsh; import java.util.Scanner; public class Test08 { public static void main(String[] ar ...

  4. Java基础知识强化07:打印出空心菱形

    1.如图打印出空心菱形: 2.下面是逻辑实现代码: package himi.hebao04; import java.util.Scanner; public class TestDemo08 { ...

  5. Java 写三角形 空心三角形 菱形 空心菱形

    闲来无事,练习了一下Java基础中的循环语句.练习循环语句,当然少不了,用*打印出来三角形.空心三角形.菱形等这样的几何图形. 粗心大意,失误两次: 一.三角形 遇到一些小问题: 二.金字塔 由于三角 ...

  6. for循环输出空心菱形的形状【java】

    使用for循环语句输出以下“空心菱形”效果: * * * * * * * * * * * * * * * * 建议优先参考笔者的另一篇文章:<for循环输出菱形的形状[java]> 代码: ...

  7. java中打印实心菱形以及空心菱形的方法

    一.打印效果 二.实现代码汇总 为了方便初学者对代码的理解,建议熟练t1到t5为各种三角的打印,然后再进行菱形的打印实现. package circulationDemo; import java.u ...

  8. java杨辉三角和空心菱形(二维数组篇)

    一.杨辉三角 import java.util.Scanner; //导入包 public class Test7 { public static void main(String[]args){ S ...

  9. java在控制台输出空心正方形,菱形,空心菱形

     使用for和if打印一个空心正方形 /*思路:要想打印一个5x5的空心正方形,首先它的第一横行和最后一行都是填满的,需要全部遍历出来,第二三四行和只有左右两条边是出来的,中间部分为空的.因此在打印第 ...

随机推荐

  1. Reverse Integer - 反转一个int,溢出时返回0

    Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, retur ...

  2. 初次配置git与github出现push不了的问题

    ssh: connect to host gmail.com port 22: No route to host fatal: Could not read from remote repositor ...

  3. HDU 6047 Maximum Sequence(线段树)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...

  4. java 常见数据结构

    1)tree 2) queue 3) list 4) stack 5) heap 6) map

  5. javascript中this的用法

    this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ this.x = 1; } 随着函数使用场合的 ...

  6. RabbitMQ入门-高效的Work模式

    扛不住的Hello World模式 上篇<RabbitMQ入门-从HelloWorld开始>介绍了RabbitMQ中最基本的Hello World模型.正如其名,Hello World模型 ...

  7. mysql5.7.18的安装与主从复制

    CentOS6.7安装mysql5.7.18 1.  解压到/usr/local目录 # tar -zxvf mysql-5.7.18-linux-glibc2.5-i686.tar.gz -C /u ...

  8. git中常用的指令

    1.初始化仓库 git init2.设置用户名与邮箱 git config --global user.name 'name' git config --global user.email 'emai ...

  9. Java微信公众平台开发之公众号支付(微信内H5调起支付)

    官方文档点击查看准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败)借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公 ...

  10. XAMPP启动MySQL时报端口被占用错误

    1 问题描述 启动XAMPP中的mysql时宝凑,错误信息是:3306端口被占用 2 问题诊断 2.1 可能是在安装XAMPP之前安装了MySQL,这样电脑中就有两个MySQL啦,如果我们在安装时都采 ...