2014-02-26 46 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

嗯,我明白了。那我该怎么办? –