作者sbrhsieh (sbr)
看板java
标题Re: [问题] 如何用一个 for 印出星号菱形
时间Tue May 12 21:52:31 2009
※ 引述《pthuang (◢晓筱◤)》之铭言:
: 这两天被老师丢了一个问题
: 叫我们想该怎麽用一个 for 就印出星号组成的菱形
: * 大概就是像这个样子
: ***
: ***** 可以引入 Math 来使用(其他应该也可以啦 XD)
: ***
: * 目前是想到从 -N 配合 Math.abs(绝对值)下手
: 但是怎麽想都觉得好像还是得用上两个 for 才行呀 =口="
: 所以想来问问版众们有没有什麽比较好的想法
: (虽然老师後来说可以用两个 for 啦.... :P)
以对角线长度为 5 来说,把菱形重心标为座标 (0, 0),那麽划上 * 的位置
的座标会满足 |x| + |y| <= 2。
以一个从 0 数到 24 的 loop 来做,你可以由 counter 来换算出座标,那麽就
可以使用一个 loop 来画出这个图形。
public class DiamondDemo {
public static void main(String[] args) {
int n = 5;
if (args.length > 0)
n = Integer.parseInt(args[0]);
printDiamond(n, "*", " ");
}
public static void printDiamond(int diagonalSize, String dot, String space) {
if (diagonalSize % 2 != 1)
throw new IllegalArgumentException("diagonal size must be a odd number");
final int n = diagonalSize / 2;
for (int i = 0; i < diagonalSize * diagonalSize; ++i) {
int x = i % diagonalSize - n;
int y = i / diagonalSize - n;
if (Math.abs(x) + Math.abs(y) <= n)
System.out.print(dot);
else
System.out.print(space);
if (x == n)
System.out.println();
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.129.3
※ 编辑: sbrhsieh 来自: 218.173.129.3 (05/12 21:55)
1F:推 james732:大一我也遇过这题 那时还真的想不出来 05/12 22:01
2F:推 Corns:推好人一枚~ 05/12 23:15
3F:推 pthuang:这这这....真的是好人 =口=" 本来想说来问个想法就好 05/12 23:31
4F:→ pthuang:想不到居然连原始码都给我了 大感谢 那等等来问问题 XD 05/12 23:32
5F:推 cecol:太酷了!这让我想起大一时地一堂软体实验课的经验... 05/13 14:22
6F:推 pthuang:现在剩下 int x 跟 int y 这两行看不太懂 05/13 15:34
7F:→ pthuang:是说....这到底是怎麽想出来的 难以理解 ~"~ 05/13 15:35
8F:→ pthuang:是不是有算法还是什麽的 囧"> 05/13 15:37
9F:推 hougzou:助教:嗯... 版上出现过的写法,统统20分.... 05/13 17:58
10F:推 pthuang:有人可以跟我解释一下那两行吗? T.T 05/14 00:10
11F:→ sbrhsieh:(i % diagonalSize,i / diagonalSize)是以左上角为原点 05/14 01:09