一、先上要实现的效果图:

二、分析思路:

## 1.如果刚开始看到这个需求没有思路,可以先实现非空心三角形,如下效果:


##2.如果还是没有思路,可以再对需求进行扩充分析,实现半个非空心三角形,如下效果:

以红框框住的*为中心对照整个的非空三角形实现的半个三角形效果就是这样子的了。

三、实际分析:

 ## 1.首先我们要知道实现该效果肯定不是说一行一行敲出来的*,否则要是实现100层的效果,就呵呵了;## 2.通过效果图也能知道从上到下每一层展示的 【*】数量 不同,而且要考虑到这个层数可能会发生改变。有可能是3层,5层,10层。。。## 3.那就针对可能的不同层数,通过for循环进行实现;

四、 以图中4层为参考分析,先将层数写死,将半个非空三角形的需求实现出来:

 ##分析第1层:1个 *## 第2层:2个*## 第3层:3个*## 第4层:4个*可以发现,**每一层的层数既可以代表该层的*数,也就是说每一层的 * 的个数==该层所在层数:**
for(int i=1;i<=4;i++){ //我们把 i 代表对应的层数:// 每层的*数展示: 【j<=i】: 每层*个数 <=该层for(int j=1;j<=i;j++){  //j 代表每层的*个数System.out.print("*");}//将每层*数展示后换行继续下一行System.out.println();
}
## 以上代码就实现了我们需要的半个非空三角形。

五、再实现非空的整个三角形:

   ## 分析第1层: 1个*   ## 第2层:3个*          ## 第3层:5个*         ## 第4层:7个*         找找看每一层的层数和该层的*数之间的关系, 以半个三角形为基础,## 对比分析*数:1层 ----》多了0个 ;2层-----》多了1个;3层-----》多了2个;4层-----》多了3个;## 是不是**在半个三角形的基础上,每层多的*数 是该层 -1**。**再回头看之前的代码,关于每层的*数和层的关系是 j<=i,那么现在的关系就是j<=i+i-1,即j<=2xi-1;**
for(int i=1;i<=4;i++){ //我们把 i 代表对应的层数:// 每层的*数展示: 【j<=2*i-1】: 每层*个数 <=该层for(int j=1;j<=2*i-1;j++){  //j 代表每层的*个数System.out.print("*");}//将每层*数展示后换行继续下一行System.out.println();
}

运行一遍上面代码,效果如下:

先不去考虑效果图,先对比一下每层*的数量,发现是对的,也就是说我们的逻辑是对的。
再对比效果图,是不是我们现在的非空三角形和效果图相比,差别在于效果图每层开始的地方都有空格,我们的还没有。
再分析效果图每层的空格数,强调一下,我们只需要关注每层的开始部分空格就行了(左侧),后面的空格我们不需要考虑。
如果不知道每层的空格数,我们可以按照最后一层为标志,然后看每一层相比差了几个
,就是每层的空格数。
## 空格分析第1层:左侧3个空格
## 第2层:左侧2个空格
## 第3层:左侧1个空格
##第4层:左侧0个空格
通过分析,是不是每层的空格数=总层数(最后一层所在层数)-当前层数;
现在再之前的代码基础上对每层加上空格:

for(int i=1;i<=4;i++){ //我们把 i 代表对应的层数://每层空格逻辑  j<=4-i ,每层空格最大数for(int j = 1;j<=4-i;j++){System.out.print(" ");}// 每层的*数展示: 【j<=2*i-1】: 每层*个数 <=该层for(int j=1;j<=2*i-1;j++){  //j 代表每层的*个数System.out.print("*");}//将每层*数展示后换行继续下一行System.out.println();
}

再次运行代码,是不是和效果图一样了。

六、实现空心三角形

上面我们成功的将非空心三角形实现了,现在实现最后一步,空心三角形。
效果图先复制出来:

和我们实现的非空三角形对比一下:

## 分析两图:
## 第1层:都是1个
## 第2层:中间 *没了,只有开始和结束有 * ,中间部分用空格代替了
## 第3层:中间 *没了,只有开始和结束有 * ,中间部分用空格代替了
## 第4层:都是7个
分析发现,我们第一层和最后一层不需要改变。只要中间层发生改变,而且改变一样,都是每层第一个和最后一个是 * ,其余用空格代替。
我们在非空基础上进行代码修改:

for(int i=1;i<=4;i++){ //我们把 i 代表对应的层数:
//每层空格逻辑  j<=4-i ,每层空格最大数
for(int j = 1;j<=4-i;j++){System.out.print(" ");
}// 每层的*数展示: 【j<=2*i-1】: 每层*个数 <=该层for(int j=1;j<=2*i-1;j++){  //j 代表每层的*个数//对*所在位置判断if(j==1 || j== 2*i-1 || i==4){System.out.print("*");}else{System.out.print(" ");}}//将每层*数展示后换行继续下一行System.out.println();
}

至此,我们就实现了我们最初想要的效果:实现空心三角形。

补充:

以上我们实现的是将三角形的层数写死了(4层),考虑到我们的需求可能有5层,10层,所以将我们的层数抽出来,这样我们只需要修改相应的层数就行。代码如下:
   int layerIndex = 4; //定义层数变量,需要几层只需要修改这个值就行。for(int i=1;i<=layerIndex;i++){ //我们把 i 代表对应的层数://每层空格逻辑  j<=4-i ,每层空格最大数for(int j = 1;j<=layerIndex-i;j++){System.out.print(" ");}// 每层的*数展示: 【j<=2*i-1】: 每层*个数 <=该层for(int j=1;j<=2*i-1;j++){  //j 代表每层的*个数//对*所在位置判断if(j==1 || j== 2*i-1 || i==layerIndex){System.out.print("*");}else{System.out.print(" ");}}//将每层*数展示后换行继续下一行System.out.println();
}

如果觉得看起来比较吃力的话,可以看下这个视频:韩顺平_空心金字塔

java实现空心三角形相关推荐

  1. java空心三角形_java经典算法_019打印三角形(空心,实心)

    打印三角形(空心,实心) package com.arithmetic; /** * 打印三角形(空心,实心) * * @author Administrator * */ public class ...

  2. java输出到空心三角形_java经典算法_019打印三角形(空心,实心) | 学步园

    打印三角形(空心,实心) package com.arithmetic; /** * 打印三角形(空心,实心) * * @author Administrator * */ public class ...

  3. HDU2091 空心三角形

    空心三角形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. HDU2091 空心三角形 水题

    空心三角形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. HDU - 2091 空心三角形 水题,但是有点坑...

    空心三角形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. HDU2091 空心三角形【打印图案】

    空心三角形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. c语言空心三角形形编程代码,空心三角形的简单实现(必看篇)

    好久没写C代码了,敲着试试,以下代码没经过调试,纯手工写的,如有bug自己调试,要学编程还是得多敲代码,这里提供思路:可以把打印的部分划分成三部分,左边和右边的空格是一样多的,主要是中间的打印,它是以 ...

  8. 【C语言练习——打印空心三角形】

    活动地址:毕业季·进击的技术er 夏日炎炎,热浪中我们迎来毕业季,这是告别,也是迈向新起点的开始.这是一个毕业的月份,每年看到很多毕业生都离校上班,在校生准备考试和暑假实习,都非常感慨,不管怎样,作为 ...

  9. css空心三角形_纯CSS制作空心三角形和实心三角形及其实现原理

    纯CSS制作空心三角形和实心三角形及其实现原理 在一次项目中需要使用到空心三角形,我瞬间懵逼了.查阅了一些资料加上自己的分析思考,终于是达到了效果,个人感觉制作三角形是使用频率很高的,因此记录下来,供 ...

  10. java继承求三角形圆形面积_java求三角形面积

    (min>c)min=c; if(min>d)min=d; System.out.println("min is "+min); } } } 15.test30003求 ...

最新文章

  1. POJ-2635 The Embarrassed Cryptographer 大数取模
  2. 【转】android开发工具Eclipse,androidStudio,adt网盘下载--不错
  3. jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
  4. 数字语音信号处理学习笔记——绪论(1)
  5. c语言密码程序返回,想程序高手求助--用C语言来编辑一个输入密码的程序
  6. OCX控件注册相关(检查是否注册,注册,反注册)
  7. 类成员与方法访问控制从严
  8. Tips for vcpkg
  9. 演说之禅:演说中的 1-7-7法则
  10. 读Windows核心编程-1-错误处理
  11. SpringBoot+Vue项目个性化音乐推荐系统
  12. ROS 教程——从入门到入土
  13. 汉化 工具 批量 自动化 批处理
  14. PAT乙级-1055 集体照 (25分)
  15. 易语言新手入门教程第十四课 - QQ自动登录器第二部分
  16. 【UnityAR相关】Unity Vuforia扫图片成模型具体步骤
  17. Oracle11G数据库重演测试
  18. Warning: ReactDOM.render is no longer supported in React 18.
  19. “学院派”商汤科技:原创技术价值迸发
  20. 使用DEM和矢量数据绘制地图

热门文章

  1. VIVADO生成并导入网表文件
  2. #惊奇建模主仆见证了 Hobo 的离别
  3. 鼠标双击成了查看属性是怎么回事?怎样解决?
  4. 大数据学习线路_大数据初学者必备的详细版学习路线图
  5. Win10安装Fliqo翻页时钟屏保
  6. esp8266+arduino+网页配网+温湿度上传+温度控制开关+eeprom永久保存+微信小程序控制
  7. 普及组noip2015年问题求解——重新排列1234和根节点数为2015的二叉树最多有__个叶子节点
  8. JAVA算法:三角形周长(JAVA版本算法)
  9. evga x58服务器芯片组,EVGA发布X58主板 首次涉足Intel芯片组
  10. 苹果cms设置本地播放器 ckplayer(版本:ckplayerx)