相信大家在学习流程控制的循环结构时,一定都用for循环绘制过菱形和空心菱形吧,我记得我当时写的很麻烦,把一个菱形分为上下两部分,上面2重for循环,下面2重for循环,相信有很多的小伙伴都是这样做的吧,但是这样也造成了很多的代码冗余,今天无意间看到另外一种简便的方法,具体思路和实现过程如下图所示:

  思路:

      1.先画一个正方形,边长为奇数.

    2.定义每一行的初始位置和结束位置,初始值为:边长/2+1.

    3. 在每一行的输出位置和结束位置打印*,即为最中间的一条竖线.

    4.改变初始位置和结束位置,上半部分菱形,初始位置--,结束位置++;下半部分相反.

    5.在每一行的初始位置和结束位置之间打印*,即为实心菱形.

    6.只在每一行的初始位置和结束位置处打印*,即为空心菱形.

          

第一步,输出正方形

 public class PrintExample {
public static void main(String[] args) {
int size = 5;
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
System.out.print("*");
}
System.out.println();
}
}
}

结果:

第二步,输出一条竖线

 public class PrintExample {
public static void main(String[] args) {
int size = 5;
int startPos = size/2 + 1;
int endPos = size/2 + 1;
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
if (j>=startPos && j<=endPos) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
}

效果:

第三步,输出实心菱形

 public class PrintExample {
public static void main(String[] args) {
int size = 5;
int startPos = size/2 + 1;
int endPos = size/2 + 1;
boolean flag = true;
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
if (j>=startPos && j<=endPos) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
if ((endPos - startPos + 1) == size) {
flag = false;
}
if (flag) {
startPos--;
endPos++;
}else {
startPos++;
endPos--;
}
System.out.println();
}
}
}

效果:

第四步,输出空心菱形

 public class PrintExample {
public static void main(String[] args) {
int size = 5;
int startPos = size/2 + 1;
int endPos = size/2 + 1;
boolean flag = true;
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
if (j==startPos || j==endPos) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
if ((endPos - startPos + 1) == size) {
flag = false;
}
if (flag) {
startPos--;
endPos++;
}else {
startPos++;
endPos--;
}
System.out.println();
}
}
}

效果:

总结:

  编程要懂得转换思路,多思考,通常一个问题会有多种解决方法,我们要多思考,多尝试,找出最方便的方法.

for循环打印空心菱形的新方法的更多相关文章

  1. Java打印空心菱形

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

  2. c语言打印空心菱形

    ***算法:把菱形的中心看成坐标的原点(,),由此可以知道,如果|x| + |y| <= n;则打印输出"*"号,否则打印输出" " int mai(){ ...

  3. 09-使用for循环输出空心菱形(循环)

    /** * 使用for循环输出空心菱形 * */ public class Test7 { public static void main(String[] args) { for (int i = ...

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

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

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

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

  6. 案例>>>用绝对值的方法打印出菱形

    import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = ...

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

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

  8. Java温故而知新-空心菱形

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

  9. php——用for循环打印半金字塔、金字塔、正方形、倒金字塔、菱形、空心图形等

    1.半金字塔 $n=5; //控制层数 for($i=1;$i<=$n;$i++){ //控制每层的 “*” 数 for($j=1;$j<=$i;$j++){ echo  "*& ...

随机推荐

  1. angular安装

    安装时间:20190703安装环境:win10 1 安装Nodejs 1.1 下载地址:https://nodejs.org/en/ 1.2 下载完成之后双击安装,安装完成之后无需配置环境变量(安装的 ...

  2. 【设计模式】结构型05组合模式(Composite Pattern)

    组合模式(Composite Pattern) 意图:将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 主要解决:它在我们 ...

  3. Mac上使用ssh连接服务器title显示服务器的ip

    Mac上使用ssh连接服务器title显示服务器的ip 使用Mac开发时,管理的服务器过多时,会搞混乱.可能有时啪啪啪一顿操作,最后发现操作错了机器. 解决方案 在远程服务器上,编辑vim /etc/ ...

  4. Django迁移数据库报错

    Django迁移数据库报错 table "xxx" already exists错误 django在migrate时报错django migrate error: table 'x ...

  5. HDU 5616:Jam's balance(背包DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5616 题意:有n个物品,每个重量为w[i],有一个天平,你可以把物品放在天平的左边或者右边,接下来m个询问,问是 ...

  6. HDU 5791:Two(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description   Alice gets two sequences A ...

  7. shiro自定义异常无法被捕获总是抛出AuthenticationException解决方案

    这个问题我也是出的莫名其妙,刚开始好好的,然后配置多realm之后出的. 现在直入主题 在继承了 org.apache.shiro.authc.pam.ModularRealmAuthenticato ...

  8. 数字IC前后端设计中的时序收敛(三)--Hold违反的修复方法

    本文转自:自己的微信公众号<数字集成电路设计及EDA教程>(二维码见博文底部) 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教 ...

  9. (ps2019)Photoshop 2019 最新破解版下载

    Photoshop CC 2019新增功能: 下载地址 点我 新功能介绍:https://helpx.adobe.com/cn/photoshop/using/whats-new.html 经过改良设 ...

  10. RSYNC部署

    1 rsync简介 1.1 什么是rsync rsync: - a fast, versatile, remote (and local) file-copying toolrsync:是一种快速,多 ...