用java实现的一个简单的沙漏算法

作为一个垃圾的初学者,这是我的处女博客,还请大佬们批评指点。

 public static void main(String[] args) {System.out.println("这是一个通用沙漏算法,设置沙漏的宽度(宽度与高度一致,要求宽度为奇数,且必须大于等于3):");Scanner sc=new Scanner(System.in);int weigh=sc.nextInt();   //获取沙漏的宽度(宽度即高度)for(int i=0;i<weigh;i++){if(i<weigh/2){for (int j=1;j<=i;j++) System.out.print(" ");for (int j=1;j<=weigh-2*i;j++) System.out.print("*");}else{for (int j=1;j<=weigh-i-1;j++) System.out.print(" ");for (int j=1;j<=2*(i-weigh/2)+1;j++) System.out.print("*");}System.out.println();}}

我个人认为不论是什么复杂的程序都可以将它逐步拆分成简单的步骤,别看下面步骤多实际上理解起来还是很容易的,言归正传,这是一个非常简单的沙漏算法,可能我的步骤比较复杂,我的原则是除了循环体内的循环变量在过程中尽量不定义第三方变量,当然这是我一个菜鸟的看法。

(1)首先我们应该思考整个完成沙漏步骤,不多说,拆拆拆,将整个沙漏完成步骤拆成上下两个部分(注意这里为什么不分成上中下三个部分是因为中间那一个星号既符合上面部分的规则,又符合下面部分的规则),然后将输出部分再拆成输出星号和空格这两个部分,这样大体的思路已经通了。

(2)由于是按规律输出多行数据,那么最外层的循环就是指定的需要循环的行数(沙漏的宽度即高度,所以这里的weigh即high,注意这里的循环变量 i 是从0开始的)。

(3)拆分成上下两个部分的条件是根据沙漏的高度的一半来决定的,这样沙漏分成上下两个部分的任务就分配好了。

(4)然后根据上下两个部分的不同来根据条件输出*和空格(这里的条件需要大兄弟们有点数学的思维即可)

(5)首先上半部分:

1.每行空格的特点是:初始行不输出,后面每一行依次多输出一个空格(直到到达总行数的一半)。注意(对于新手):来说这里的for循环是指:输出指定个空格。由于外层循环从0开始每次递增1,跟我们空格数初始值以及变化一致,第0行(这里的0即真正的第1行)i为0,那么j<=0不成立那么不输出空格,第1行i=1,j初始值为1,j<=1那么输出一个空格,依次类推(j<=i)的由来。

2.每行星号的特点是:初始行输出沙漏的总长度个星号,后面每行依次少输出2个星号(直到到达总行数的一半)。注意(同上):由于每行输出星号根据循环到的指定行数来决定,即每到下一行就是上一行总星号数减2,由于初始值为weigh,一行减少2*1个星号,两行减少2*2个星号,那么i行就是减少2*i个星号,那么每行总星号就为weigh-2*i。(j<=weigh-2*i 的由来,i初始值为0切记)。

(6)其次下半部分:

1.每行空格的特点是:初始行输出沙漏总高度一半的空格数,后面每行依次少输出一个空格(直到总行数为之)。注意(同上):这里for循环初始值为1,那么第一行需要输出:weigh-1-已经循环到的指定行数(weigh-1-i 的由来,i 初始值为0切记)

2.每行星号的特点是:这里是比较难理解的地方了,说白了步骤如下:假设漏斗宽度为7,那么下半部分第3行(因为i 初始值为0,则第三行指第四行)一个星号,第4行3个星号,第5行5个星号,第6行7个星号,由于初始值为1,所以一定是某某表达式+1
,此时i是从3开始的,那么为了方便我们把它减少为0,即i-3,那么下半部分第1行(即整体的第3行)星号个数就是2*(3-3)+1,第2行星号个数是2*(4-3)+1,以此类推第i行就是2*(i-3)+1,那么宽度为7的漏斗下半部分每行星号个数就是2*(i-3)+1
由上面得到的表达式我们可以类推即宽度为i的漏斗下半部分每行星号个数就是2*(i-weigh/2)+1

总结:虽然我步骤写的有点多,但是我感觉每一步的表达式都写得比较详细,希望大佬们别吐槽,毕竟一个字一个字手打的,觉得不好理解的,我可能真的无能为力了,毕竟我的水平有限。再次感谢观看的大佬们。

java实现沙漏算法相关推荐

  1. Java 数据结构与算法系列之冒泡排序

    一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...

  2. Java数据结构与算法——树(基本概念,很重要)

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...

  3. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  4. Java数据结构与算法——插入排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...

  5. JAVA版连连看算法研究

    JAVA连连看之算法: 连连看连接方式的类型:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:off ...

  6. java 求交集 算法_Java计算交集,差集,并集的方法示例

    Java计算交集,差集,并集的方法示例 发布时间:2020-10-07 10:37:46 来源:脚本之家 阅读:106 作者:benbenkui 本文实例讲述了Java计算交集,差集,并集的方法.分享 ...

  7. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  8. Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...

  9. java基础----Base64算法的使用

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...

最新文章

  1. Apache Hadoop 2.7如何支持读写OSS
  2. python读写excel
  3. 零基础可以学python吗-学Python需要什么基础知识?零基础可以学Python吗?
  4. 零基础学python爬虫-零基础学习python_爬虫(53课)
  5. React学习:入门实例-学习笔记
  6. IOS开发基础知识--碎片5
  7. Python实战从入门到精通第十九讲——自定义字符串的格式化
  8. 用户登入验证码代码示例
  9. java怎么连高斯数据库_Gauss DB 数据库使用(二) Data Studio
  10. 懒人精灵 一 获取淘宝北京时间接口
  11. C++学习(complex类)
  12. debian9自动化部署Fully Automatic Installation(FAI)
  13. CE修改器入门:查找多级指针
  14. XMLHttpRequest cannot load 的解决方法
  15. LCD1602和12864简单的介绍
  16. 字符串转时间(time_t)
  17. HTML5+CSS3小实例:菜单栏图标悬停效果
  18. 在CSDN博客中添加Google Adsense等广告来赚钱
  19. 渗透测试-----信息收集(通过DNS解析找IP地址、CDN、IP查询、IP物理地址、搜索引擎、网站信息收集)
  20. 微博客传播特性及盈利模式分析

热门文章

  1. 流量卡设备状态已停用怎么开启_物联网卡停机怎么办?教你轻松解决
  2. 数据表明越穷越爱玩手机,你被手机绑架了多久?
  3. 第03课:怎么针对微服务架构做单元测试?
  4. 微信小程序充值及充值回调后的处理
  5. 9款国内外垂直领域的在线作图工具:那些可以替代Visio的应用!
  6. PSD格式怎么转换成JPG?这几种方法轻易转换图片格式
  7. cocos creator 热更新报错 ERROR_DOWNLOAD_MANIFEST: not permitted by network security policy
  8. python学生信息管理系统-增删改查-根据姓名查询
  9. [BSidesCF 2020]Had a bad day
  10. 大三实习面试 基础+加分项