2014-02-26 49 views
1

我想要做的就是一個盒子,像這樣:與縮放輸出迴路

|../\..../\..| 
|./\/\../\/\.| 
|/\/\/\/\/\/\| 
|\/\/\/\/\/\/| 
|.\/\/..\/\/.| 
|..\/....\/..| 

,併爲它的代碼是

public static void drawUpper(int count) 
{ 
    System.out.print("|"); 

    for(int i = 0; i <= (count); i++){ 
     System.out.print("."); 
    } 

    for(int i = 0; i <= (-count + 1); i++){ 
     System.out.print("/\\"); 
    } 

    for(int i = 0; i <= count; i++){ 
     System.out.print("."); 
    } 

    for(int i = 0; i <= count; i++){ 
     System.out.print("."); 
    } 

    for(int i = 0; i <= (-count + 1); i++){ 
     System.out.print("/\\"); 
    } 

    for(int i = 0; i <= count; i++){ 
     System.out.print("."); 
    } 

    System.out.print("|"); 
    System.out.println(); 
} 

public static void drawLower(int count) 
{ 
    System.out.print("|"); 

    for(int i = 0; i <= -count; i++){ 
     System.out.print("."); 
    } 

    for(int i = 0; i <= (count + 1); i++){ 
     System.out.print("\\/"); 
    } 

    for(int i = 0; i <= -count; i++){ 
     System.out.print("."); 
    } 

    for(int i = 0; i <= -count; i++){ 
     System.out.print("."); 
    } 

    for(int i = 0; i <= (count + 1); i++){ 
     System.out.print("\\/"); 
    } 

    for(int i = 0; i <= -count; i++){ 
     System.out.print("."); 
    } 

    System.out.print("|"); 
    System.out.println(); 
} 

然而,這需要是在目前的規模是5;

private static int size = 5; 


public static void main(String[] args) 
{ 
    for(int i = 1; i > (-size/2); i--){ 
     drawUpper(i); 
    } 

    for(int i = 1; i > (-size/2); i--){ 
     drawLower(i); 
    } 
} 

現在,只要規模不改變,它完美的作品,我對自己很滿意。然而,當我規模改爲7盒子似乎變成這樣:

|../\..../\..| 
|./\/\../\/\.| 
|/\/\/\/\/\/\| 
|/\/\/\/\/\/\/\/\| 
|\/\/\/\/\/\/| 
|.\/\/..\/\/.| 
|..\/....\/..| 
|............| 

但是,它應該是這樣的:

|....../\............/\......| 
|...../\/\........../\/\.....| 
|..../\/\/\......../\/\/\....| 
|.../\/\/\/\....../\/\/\/\...| 
|../\/\/\/\/\..../\/\/\/\/\..| 
|./\/\/\/\/\/\../\/\/\/\/\/\.| 
|/\/\/\/\/\/\/\/\/\/\/\/\/\/\| 
|\/\/\/\/\/\/\/\/\/\/\/\/\/\/| 
|.\/\/\/\/\/\/..\/\/\/\/\/\/.| 
|..\/\/\/\/\/....\/\/\/\/\/..| 
|...\/\/\/\/......\/\/\/\/...| 
|....\/\/\/........\/\/\/....| 
|.....\/\/..........\/\/.....| 
|......\/............\/......| 

回答

1

這是我想出了。我只提供了生產一顆鑽石的代碼(我不會爲你做所有的工作;))。使它適應於生產兩顆鑽石是微不足道的,所以這取決於你做出這些改變(根據下面的代碼,這實際上並不困難)。

// aliases for java's verbose methods 
public static void p(char c) { System.out.print(c); } 
public static void pn(char c) { System.out.println(c); } 

// convenient shortcut for alternating between characters 
public static char[] a = {'/', '\\'}; 

public static void dotop(int size, int line) { 
    p('|'); 
    for (int i=0; i<size-line; i++) p('.'); 
    for (int i=0; i<line+1; i++) p(a[i%2]); 
    for (int i=0; i<line+1; i++) p(a[(i+1+line)%2]); 
    for (int i=0; i<size-line; i++) p('.'); 
    pn('|'); 
} 

public static void dobottom(int size, int line) { 
    p('|'); 
    for (int i=0; i<size-line; i++) p('.'); 
    for (int i=0; i<line+1; i++) p(a[(i+line+(line+1)%2)%2]); 
    for (int i=0; i<line+1; i++) p(a[(i+1+(line+1)%2)%2]); 
    for (int i=0; i<size-line; i++) p('.'); 
    pn('|'); 
} 

public static void main(String[] args) { 
    int size = 4; 
    for (int i=0; i<=size; i++) dotop(size, i); 
    for (int i=0; i<=size; i++) dobottom(size, size-i); 
} 

所產生的輸出是:

|..../\....| 
|.../\/\...| 
|../\/\/\..| 
|./\/\/\/\.| 
|/\/\/\/\/\| 
|\/\/\/\/\/| 
|.\/\/\/\/.| 
|..\/\/\/..| 
|...\/\/...| 
|....\/....| 
+0

原比例是5,所以它不是其不均勻的? –

+0

生成的行數是6.同時也意識到正在發生整數除法。你會得到相同的結果,4 *和* 5的比例(你不應該使用奇數比例)。 – collinjsimpson

+0

嗯,我明白了。那我該怎麼辦? –