Java从入门到精通习题:用for循环打印菱形。

nsywjh75 2021-03-31 10:18:32
只用两个for循环打印出菱形图案

代码如下:
public static void main(String[] args) {
int gs=-1; //初始化每行要打印的字符个数 在循环开始每次加2,这里赋值-1
int lines=17; //设置菱形的高度(打印图形的行数以及列数),设置的数值应为奇数
for(int i=1;i<=lines;i++) { //以行为单位做循环
gs=gs+((i<=(lines/2+1))?2:-2); //计算此(i)行需要打印的字符数量
//如果当前行小于等于菱形高度(行数或列数)的一半+1,那么需要打印字符的数量+2
//如果当前行大于菱形高度的一半+1,那么打印字符的数量-2
//达到最大打印字符长度之前做+2运算,之后做-2运算
for(int j=1;j<=lines;j++) { //以列为单位循环

if (j>(lines-gs)/2 && j<((lines-gs)/2+gs+1)) { //判断该位置显示的是字符还是空格(字符显示的坐标范围)
//“(lines-gs)/2”是该行要打印的字符前的最后一个空格的坐标
//“(lines-gs)/2+gs+1”是该行要打印的字符后面的第一个空格的坐标值
System.out.print("O"); //显示字符O
}else {
System.out.print(" ");//如果不是字符显示的坐标则显示空格
}
}

System.out.println();
}


}
...全文
408 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nsywjh75 2021-04-08
  • 打赏
  • 举报
回复
引用 3 楼 KeepSayingNo的回复:
老哥,写个spring用你这个O打印出来的效果
我学java才一个月,spring今天才在论坛看到过
nsywjh75 2021-04-08
  • 打赏
  • 举报
回复
引用 6 楼 镇潮的回复:
按理说你这个不是菱形,是正方形,因为高和宽相等有相等数量的字符,只是因为打印台的显示机制,导致横着的间隔和竖着的间隔不一样
其实书中出这道作业题的目的是让学生练习使用for循环,使用多个for循环嵌套。至于菱形的说法是出题者的一种理解,这里行与列的数量是相等的,也就是说显示出来的是正方形,如果把行与列单独设置数量的话,也是可以的,代码修改一下就能实现。我之所以把我写的这段代码发到论坛,是因为我的算法与书中的答案是不一样的。我这里只用了两个for循环,还答案中用到了6个for循环。这是因为编程算法的不一样导致代码长度不一样,计算机的工作量也不一样。这也就是同样量级的游戏,暴雪做得比微软做的更流畅(星际争霸VS罗马复兴)。
聪头 2021-04-07
  • 打赏
  • 举报
回复
镇潮 2021-04-07
  • 打赏
  • 举报
回复
按理说你这个不是菱形,是正方形,因为高和宽相等有相等数量的字符,只是因为打印台的显示机制,导致横着的间隔和竖着的间隔不一样
KeepSayingNo 2021-04-06
  • 打赏
  • 举报
回复
老哥,写个spring用你这个O打印出来的效果
nsywjh75 2021-04-06
  • 打赏
  • 举报
回复
引用 1 楼 风度翩翩猪肉佬 的回复:
很详细啊,老哥
谢谢! 共同学习。
HuangHe201691 2021-04-06
  • 打赏
  • 举报
回复
点个赞,老哥
00后学编程 2021-04-03
  • 打赏
  • 举报
回复
很详细啊,老哥

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧