Re: [問題] 如何用一個 for 印出星號菱形
※ 引述《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)
推
05/12 22:01, , 1F
05/12 22:01, 1F
推
05/12 23:15, , 2F
05/12 23:15, 2F
推
05/12 23:31, , 3F
05/12 23:31, 3F
→
05/12 23:32, , 4F
05/12 23:32, 4F
推
05/13 14:22, , 5F
05/13 14:22, 5F
推
05/13 15:34, , 6F
05/13 15:34, 6F
→
05/13 15:35, , 7F
05/13 15:35, 7F
→
05/13 15:37, , 8F
05/13 15:37, 8F
推
05/13 17:58, , 9F
05/13 17:58, 9F
推
05/14 00:10, , 10F
05/14 00:10, 10F
→
05/14 01:09, , 11F
05/14 01:09, 11F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):