作者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)
推 james732:大一我也遇過這題 那時還真的想不出來 05/12 22:01
推 Corns:推好人一枚~ 05/12 23:15
推 pthuang:這這這....真的是好人 =口=" 本來想說來問個想法就好 05/12 23:31
→ pthuang:想不到居然連原始碼都給我了 大感謝 那等等來問問題 XD 05/12 23:32
推 cecol:太酷了!這讓我想起大一時地一堂軟體實驗課的經驗... 05/13 14:22
推 pthuang:現在剩下 int x 跟 int y 這兩行看不太懂 05/13 15:34
→ pthuang:是說....這到底是怎麼想出來的 難以理解 ~"~ 05/13 15:35
→ pthuang:是不是有算法還是什麼的 囧"> 05/13 15:37
推 hougzou:助教:嗯... 版上出現過的寫法,統統20分.... 05/13 17:58
推 pthuang:有人可以跟我解釋一下那兩行嗎? T.T 05/14 00:10
→ sbrhsieh:(i % diagonalSize,i / diagonalSize)是以左上角為原點 05/14 01:09