java实现空心金字塔

前言

最近在学习java,遇到了一个经典打印题目,空心金字塔,初学者记录,根据网上教程,有一句话感觉很好,就是先把麻烦的问题转换成很多的简单问题,最后一一解决就可以了,然后先死后活,先把程序写死,后面在改成活的。

如下图是空心金字塔最终的实现效果,先要求用户输入层数然后输出

java实现空心金字塔

一.普通矩形

首先我们先把这个需求拆分,肯定是一堆星号里面扣出一个三角,那么我们先简单输出一个矩形,如下代码。

package test.test;

public class test {
    public static void main(String[] args) {
        //循环五次每次输出五个星号
        for (int i = 1; i

输出效果图如下,非常简单。

java实现空心金字塔

二.普通三角形

既然输出了普通矩形,那么我们就可以来思考如何输出三角形,如下分析,是我们想要输出的效果,第一层是输出的一个,第二层是输出的两个,以此内推,思路是我们可以使用循环嵌套,第一层循环用来循环层数,第二层循环用来循环每层星号的个数。

*       //第一层为一个
**      //第二层位两个
***     //第三层位三个
****
*****

意思就是我们每层循环的个数小于等于层数即可,如下增加代码。

package test.test;

public class test {
    public static void main(String[] args) {
        //i为层数
        for (int i = 1; i

如下图输出结果,可以输出三角形

java实现空心金字塔

三.输出等腰三角形

上面我们输出了普通三角形,我们现在需要输出等腰三角形,如下分析,也是我们需要输出的结果,首先可以发现,第一层为一个星号,第二层为三个星号,第三个为五个星号,是按按照奇数来的,但是也可以是 2 * 层数 -1,所以每层的个数是 2 * 层数 -1

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

如下代码修改,可以输出,修改的地方就是第二层循环 j<=i< code>&#x53D8;&#x6210;&#x4E86;<code>j<= 2 * i - 1< code>&#xFF0C;&#x56E0;&#x4E3A;i&#x4EE3;&#x8868;&#x7684;&#x662F;&#x5C42;&#x6570;&#x3002;<!--=--></code><!--=i<-->

package test.test;

public class test {
    public static void main(String[] args) {
        //i为层数
        for (int i = 1; i

如下图输出效果,发现没有输出我们想要的效果。

java实现空心金字塔

我们需要进行修改,我们再来看一下最终效果,如下,发现前面是有空格的,空格的规律是啥啊?数一数可以发现,第一层的空格是四个,第二层的空格是3个,第三层的空格是2个……,仔细思考,发现就是总层数减去当前层数,比如第一层就是 5-1,第二层就是 5-2

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

思路是这样,代码的思路就是先在前面打印完成空格之后在打印星号,如下代码修改,修改的地方是在第二层循环的前面,加上了一个循环,是为了循环输出空格。

package test.test;

public class test {
    public static void main(String[] args) {
        //i为当前层数
        for (int i = 1; i

如下输出效果。

java实现空心金字塔

四.输出空心金字塔

前面已经输出了等腰三角形,现在需要把里面掏空,最终效果应该如下,分析一下怎么才能这样输出,首先不变的是第一层和最后一层,变化的是中间的层数,发现中间的都是输出了第一个和最后一个星号,最后一排就是输出全部

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

思路是,第一个星号即为判断,当 j==1的时候那么就是输出第一个星号,当 j == 2 * i - 1的时候即可输出最后一个星号,所以代码如下,更改的地方在循环每层循环的地方,加了一个判断, j==1的时候也就是输出每层第一个的时候, j == 2 * i -1的时候就是输出最后一个的时候。

package test.test;

public class test {
    public static void main(String[] args) {
        //i为当前层数
        for (int i = 1; i

输出结果如下图,发现还是有一点问题。

java实现空心金字塔

问题出在判断的地方,最后一排应该是不用动的所以在判断的时候判断,如果 i == 5的时候,那么还是一直输出,也就是当每层层数等于5的时候那么还是会输出星号。

如下修改代码。

package test.test;

public class test {
    public static void main(String[] args) {
        //i为当前层数
        for (int i = 1; i

输出结果如下,发现成功输出空心金字塔。

java实现空心金字塔

五.实现先死后活

既然效果完成了,那么现在需要实现的是,可以自定义层数,让用户来输入层数,然后再来循环,很简单,思路就是使用 scanner来接收,然后把下面每层的数字变成变量即可,代码如下。

package test.test;

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        //接收用户输入的值
        Scanner input = new Scanner(System.in);
        System.out.println("请输入层数字:");
        int ceng = input.nextInt();
        //i为当前层数
        for (int i = 1; i

输出效果如下图,会先叫我们输入数字来当作层数

java实现空心金字塔

因为我本人也是学习当中,如果有什么不对的地方,欢迎指正!(~ ̄▽ ̄)~

Original: https://www.cnblogs.com/takagisan/p/16202767.html
Author: 御七彩虹猫
Title: java实现空心金字塔

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607958/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JavaSE前期准备1

    历史(建议了解即可) 一、1990年,美国Sun公司的”Stealth计划”(后改名为”Green计划”)目标设置在家用电器等小型系…

    Java 2023年6月5日
    082
  • 设计模式 — Strategy(策略模式)

    Strategy(策略模式) 定义一系列算法,把他们一个个封装起来,并且是他们可以互相替换(变化)。该模式似的算法可以独立于使用它的客户程序(稳定的)而变化(扩展,子类) 动机(M…

    Java 2023年6月16日
    062
  • 一文读懂位运算

    在计算机程序中所有的数都是以二进制形式存储的。位运算就是直接对整数在二进制进行计算操作。作为一名程序员掌握位运算的基本使用是很重要的,而对于算法程序员来说,位运算的灵活使用能够更灵…

    Java 2023年6月7日
    050
  • Java注解

    @Override :检测被该注解标出的方法是否是继承自父类或者父接口 安全检查: 防止在想要重写的时候因为 参数和方法名不正确等细节问题 而造成的重写失败 @Deprecated…

    Java 2023年6月6日
    083
  • 简单计算器

    .box{ margin: 0 auto; width: 300px; .text{ margin: 5px; .text input{ width: 100%; height: …

    Java 2023年6月7日
    058
  • Spring源码分析-BeanFactoryPostProcessor

    Spring源码分析-BeanFactoryPostProcessor 博主技术有限,本文难免有错误的地方,如果您发现了欢迎评论私信指出,谢谢JAVA技术交流群:737698533…

    Java 2023年6月6日
    0113
  • 软件装在D盘,实测有效

    C盘容量小,希望把所有软件都装到D盘,试过很多次,没什么作用。今天装MS全家桶的时候看到了个帖子,实测有效,Visio、Word、Excel、PowerPoint都装到了D盘原贴链…

    Java 2023年6月9日
    0144
  • 超简单的抖音去水印

    一、前言 抖音去水印方法很简单,以前一直没有去研究,以为搞个去水印还要用到算法去除,直到动手的时候才发现这么简单,不用编程基础都能做。 二、原理与步骤 其实抖音它是有一个隐藏无水印…

    Java 2023年6月7日
    098
  • mybatis-plus自定义代码模板

    http://www.manongjc.com/article/47597.html Original: https://www.cnblogs.com/tszr/p/165167…

    Java 2023年5月30日
    093
  • mybatis-plus快速入门使用

    目前正在维护的公司的一个项目是一个ssm架构的java项目,dao层的接口有大量数据库查询的方法,一个条件变化就要对应一个方法,再加上一些通用的curd方法,对应一张表的dao层方…

    Java 2023年5月30日
    071
  • JAVA自已设计JSON解析器

    当然,有很多很好的JSON解析的JAR包,比如JSONOBJECT,GSON,甚至也有为我们测试人员而打造的JSONPATH,但我还是自已实现了一下(之前也实现过,现在属于重构)。…

    Java 2023年5月29日
    045
  • Hive数据仓库工具基本架构和入门部署详解

    @ 概述 定义 本质 特点 Hive与Hadoop关系 Hive与关系型数据库区别 优缺点 其他说明 架构 组成部分 数据模型(Hive数据组织形式) Metastore(元数据)…

    Java 2023年6月5日
    065
  • java多线程实例程序实现与思想

    写程序之前要了解两个概念1.什么是进程2.什么是线程搞清楚这两个概念之后 才能写好一个合适而不会太抽象的程序对进程和线程的理解见链接: 那么理解了概念之后 如何写程序? 以银行取钱…

    Java 2023年6月7日
    063
  • rabbitmq centos 7.4 主备安装,加入主节点失败Error: unable to perform an operation on node ‘rabbit@mq2’. Please see diagnostics information and suggestions below.

    Original: https://www.cnblogs.com/yhq1314/p/14558920.htmlAuthor: 春困秋乏夏打盹Title: rabbitmq ce…

    Java 2023年5月30日
    068
  • Java基础之 类型转换

    类型转换 由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换 运算中,不同类型的数据线转化为同一类型,然后进行运算 强制类型转换 自动类型转换 1 public…

    Java 2023年6月8日
    076
  • Java SPI机制,你了解过吗?

    Life moves pretty fast,if you don’t stop and look around once in a while,you will mi…

    Java 2023年6月5日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球