2012-09-22 42 views
2

对于我的java类,其中一个练习是使用嵌套for循环打印出钻石。在练习中,您需要使用最少量的输出,同时使用嵌套for循环。另一个规定是每个输出只能输出1个字符,如单个空格,单个星号或单个结束语句。打印出嵌套for循环的钻石

我已经完成了它,但我想知道是否有一个更简单的方法来做到这一点,或者如果有人有清理我的代码的提示。它似乎最终以超出需要的方式写作。任何帮助和提示,不胜感激。 :)

下面是最终的结果需要看起来像:

这里是我的代码:

public class Diamond 
{ 
    public static void main(String args[]) 
    { 
     int b = 11; // secondary asterisk loop counter 
     int ac = 2; // asterisk count 
     int sc = 5; // space count 
     int elc = 2; // end line count 
     int slc = 1; // space loop count 
     int sslc = 1; // secondary space loop count 


     for(int e = 1; e < elc && elc < 12;e++) 
     { 
      if(elc <= 6) 
      { 
       for(int a = 1; a < ac; a++) 
       { 
         for(;sc <= 5 && sc > 0; sc--) 
         { 
          System.out.print(" "); 
         } 

         System.out.print("*"); 
       } 

       ac += 2; 
       sc = 5 - slc; 
       slc += 1; 
      } 

      else if (elc > 6) 
      { 
       ac -= 2; 
       sc = 1; 


       for (; b < ac ; b++) 
       { 

        for(;sc <= sslc && sc > -2; sc++) 
        { 
         System.out.print(" "); 
        } 

        System.out.print("*"); 
       } 

       b = 1; 
       sslc += 1; 

      } 
      if(elc != 6) 
      { 
       System.out.println(); 
      } 

      elc += 1; 
     } 
    } 
} 

回答

0

你可以试试写下菱形的4个边缘为方程(x + y = 4; xy = 2 ...例如)。然后,通过网格中的每个单元格进行嵌套循环,以查看是否应打印空间或明星。该测试看起来像

如果F1(X,Y)或F2(X,Y)或F3(X,Y)或F4(X,Y):打印 '*' 其他打印'

其中f1,f2,f3,f4是4个对角线的方程。

如果您需要尽量减少要打印的字符数,请使用数组进行准备,然后忽略尾随空格;或者使用一些专门的规则(比如除了第一个和最后...之外的每一行仅2星)

0
public class ASultan 
{ 
    public static void main(String[] args) { 

    int size = 9; 

    for (int i = 1; i < size; i += 2) { 
     for (int k = size; k >= i; k -= 2) { 
      System.out.print(" "); 
     } 
     for (int j = 1; j <= i; j++) { 
      System.out.print("*"); 
     } 
     System.out.println(); 
    } 

    for (int i = 1; i <= size; i += 2) { 
     for (int k = 1; k <= i; k += 2) { 
      System.out.print(" "); 
     } 
     for (int j = size; j >= i; j--) { 
      System.out.print("*"); 
     } 
     System.out.println(); 
    } 

    } 
}