for循环打印空心菱形的新方法
相信大家在学习流程控制的循环结构时,一定都用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循环打印空心菱形的新方法的更多相关文章
- Java打印空心菱形
使用Java打印空心菱形 public static void main(String[] args) { int n = 5; //这里输出菱形的上半部分 for (int i = 1; i < ...
- c语言打印空心菱形
***算法:把菱形的中心看成坐标的原点(,),由此可以知道,如果|x| + |y| <= n;则打印输出"*"号,否则打印输出" " int mai(){ ...
- 09-使用for循环输出空心菱形(循环)
/** * 使用for循环输出空心菱形 * */ public class Test7 { public static void main(String[] args) { for (int i = ...
- for循环输出空心菱形的形状【java】
使用for循环语句输出以下“空心菱形”效果: * * * * * * * * * * * * * * * * 建议优先参考笔者的另一篇文章:<for循环输出菱形的形状[java]> 代码: ...
- java 打印空心菱形的两种实现
第一种实现方式: //打印给定行数的空心菱形 public static void draw(int size){ if (size % 2 == 0) //如果是偶数行变为奇数 { size++; ...
- 案例>>>用绝对值的方法打印出菱形
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = ...
- java在控制台输出空心正方形,菱形,空心菱形
使用for和if打印一个空心正方形 /*思路:要想打印一个5x5的空心正方形,首先它的第一横行和最后一行都是填满的,需要全部遍历出来,第二三四行和只有左右两条边是出来的,中间部分为空的.因此在打印第 ...
- Java温故而知新-空心菱形
空心菱形 今天做题练手,题目是空心菱形,一开始没什么思路,去网上找了找,发现很难找到讲的通透的,自己现在独立做出来了,记录一下,以备后用. * * * * * * * * * * * * * * * ...
- php——用for循环打印半金字塔、金字塔、正方形、倒金字塔、菱形、空心图形等
1.半金字塔 $n=5; //控制层数 for($i=1;$i<=$n;$i++){ //控制每层的 “*” 数 for($j=1;$j<=$i;$j++){ echo "*& ...
随机推荐
- Java类库的源码
Java类库中的类,包括System.String.Scanner.Math.Random等:这些类也是用Java编写的. Java类库中包含数千个文件,其中的很多文件都包含数千行代码:因为Java类 ...
- 存储账户静态网站与Azure CDN
背景 把静态网站或文件托管在对象存储上,有很多可能很多好处,比如说:可以节省成本,因为相对虚机更便宜:性能更优,因为可以依赖于对象存储本身的高吞吐以及 CDN 的:更好的高可用性,因为也可以依赖于对象 ...
- Linux权限_用户_和用户组
Linux中用户UID就判断操作系统中用户的身份. Centos7.x: 0:超级管理员 1-999:系统用户(包含Linux中自带服务) 1000以上 普通用户 Centos6.x : Root ...
- scrapy基础知识之 Logging:
修改配置文件settings.py,任意位置添加 LOG_FILE = "XxSpider.log" LOG_LEVEL = "INFO" Log levels ...
- SpringMvc整合hibernate
之前用的比较多的是Mybatis,最近应客户要求准备hibernate的技术,给我最深的感触就是,能用mybatis尽量用mybatis,和hibernate相比优秀了不是一点半点,hibernate ...
- Java 源码学习系列(三)——Integer
Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还 ...
- springcloud-eureka客户端服务注册(含demo源码)
1. 场景描述 前几天介绍了下springcloud的Eureka注册中心(springcloud-注册中心快速构建),今天结合springboot-web介绍下eureka客户端服务注册. 2. 解 ...
- CDQZ集训DAY6 日记
又炸了. 早上起来其他竞赛生也走了,食堂做饭做的挺潦草,但为什么四川烧麦的馅是米啊??!! 起来看题总觉得都似曾相识.第一题打完40分暴力后想拿莫队搞到70分,但发现能想到的莫队维护都是nsqrt(n ...
- ~~Python文件简单操作~~
进击のpython Python文件操作 在说Python的文件操作之前 我们可以先思考一个问题 平时我们是怎么对电脑中的文件进行操作的呢? 打开电脑⇨找到文件⇨打开文件⇨读文件⇨修改文件⇨保存文件⇨ ...
- ZIP:ZipStream
ZipInputStream: ZipInputStream(InputStream in) :创建新的 ZIP 输入流. int read(byte[] b, int off, int len) : ...