2015-10-19 71 views
0

我想用星号和它的行必须由用户给出的菱形图案。当线数为偶数时,我有问题要制作钻石。这是所有的代码:偶数行的打印钻石

import java.util.Scanner; 
public class DrawDiam { 
    public static void main(String[] args) { 
     System.out.println("Please give the number of lines"); 
     Scanner in = new Scanner(System. in); 
     int L = in .nextInt(); 
     if (L < 4) { 
      System.exit(0); 
     } else { 
      if ((L % 2) != 0) { 
       int add = 1; 
       int numOfSpaces = L/2; 
       for (int i = 1; i <= L; i++) { 
        for (int j = numOfSpaces; j >= 1; j--) { 
         System.out.print(" "); 
        } 
        for (int j = 1; j <= add; j++) { 
         System.out.print("*"); 
        } 
        System.out.println(); 
        if (i < (L/2 + 1)) { 
         add = add + 2; 
         numOfSpaces = numOfSpaces - 1; 
        } else { 
         add = add - 2; 
         numOfSpaces = numOfSpaces + 1; 
        } 
       } 
      } else { 
       int add = 1; 
       int numOfSpaces = L/2; 
       for (int i = 0; i <= L + 1; i++) { 
        for (int j = numOfSpaces; j >= 1; j--) { 
         System.out.print(" "); 
        } 
        for (int j = 1; j <= add - 2; j++) { 
         System.out.print("*"); 
        } 
        System.out.println(); 
        if (i < (L/2 + 1)) { 
         add = add + 2; 
         numOfSpaces = numOfSpaces - 1; 
        } else { 
         add = add - 2; 
         numOfSpaces = numOfSpaces + 1; 
        } 
       } 
      } 
     } 
    } 
} 

所以程序要求一个号码> = 4,奇数部分是运行完美,但对于L = 6偶数部分是走出这样的:

* 
    *** 
***** 
******* 
***** 
    *** 
    * 

例如L = 6应显示this

* 
    *** 
***** 
******* 
***** 
    *** 
    * 
+0

可以得出它到底应该是什么样子? L = 4的钻石是一种奇怪的想象.. – ergonaut

+0

你会如何绘制偶数的对称钻石? –

+0

我编辑了这个问题以更好地理解它,谢谢! – kllbrd

回答

1

这是我的溶液。你需要测试你是否已经通过钻石的中间。如果你在(我== L/2)中间的和不增加添加或numOfSpaces

public static void main(String[] args) 
    { 
     System.out.println("Please give the number of lines"); 
    Scanner in = new Scanner(System. in); 
    int L = in .nextInt(); 
    if (L < 4) { 
     System.exit(0); 
    } else { 
     if ((L % 2) != 0) { 
      int add = 1; 
      int numOfSpaces = L/2; 
      for (int i = 1; i <= L; i++) { 
       for (int j = numOfSpaces; j >= 1; j--) { 
        System.out.print(" "); 
       } 
       for (int j = 1; j <= add; j++) { 
        System.out.print("*"); 
       } 
       System.out.println(); 
       if (i < (L/2 + 1)) { 
        add = add + 2; 
        numOfSpaces = numOfSpaces - 1; 
       } else { 
        add = add - 2; 
        numOfSpaces = numOfSpaces + 1; 
       } 
      } 
     } else { 
      int add = 1; 
      int numOfSpaces = L/2; 
      for (int i = 0; i < L+1; i++) { 
       for (int j = numOfSpaces; j >= 1; j--) { 
        System.out.print(" "); 
       } 
       for (int j = 1; j <= add - 2; j++) { 
        System.out.print("*"); 
       } 
       System.out.println(); 
       if (i < (L/2)) { 
        add = add + 2; 
        numOfSpaces = numOfSpaces - 1; 
       } 

编辑您的else块在这里:

   else if (i > (L/2)) 
       { 
        add = add - 2; 
        numOfSpaces = numOfSpaces + 1; 
       } 

编辑完的!

   } 
     } 
    } 
} 
+0

我觉得我现在有点愚蠢,但真的是男人,你DA REAL MVP。非常感谢! – kllbrd

+0

没问题。永远愿意帮助! –

0

不要忘记在结束时关闭扫描仪,需要检测时,“我”是“L”的中间,并删除围在中间的两条线中的一个(原因举例4/2 = 2,所以中间是2和3)。

此代码工作:

import java.util.Scanner; 
public class Main { 
    public static void main(String[] args) { 
     System.out.println("Please give the number of lines"); 
     Scanner in = new Scanner(System. in); 
     int L = in .nextInt(); 
     if (L < 4) { 
      System.exit(0); 
     } else { 
      int midp = (L/2)+1; 
      int midm = (L/2)-1; 
      if ((L % 2) != 0) { 
       int add = 1; 
       int numOfSpaces = L/2; 
       for (int i = 1; i <= L; i++) { 
        for (int j = numOfSpaces; j >= 1; j--) { 
         System.out.print(" "); 
        }  
        for (int j = 1; j <= add; j++) { 
         System.out.print("*"); 
        } 
        System.out.println(); 
        if (i < (L/2 + 1)) { 
         add = add + 2; 
         numOfSpaces = numOfSpaces - 1; 
        } else { 
         add = add - 2; 
         numOfSpaces = numOfSpaces + 1; 
        } 
       } 
      } else { 
       int add = 1; 
       int numOfSpaces = L/2; 
       for (int i = 0; i <= L + 1; i++) { 
        if(i != midm){ 
         for (int j = numOfSpaces; j >= 1; j--) { 
          System.out.print(" "); 
         } 
         for (int j = 1; j <= add - 2; j++) { 
          System.out.print("*"); 
         } 
         System.out.println(); 
         if(i == midp){ 

         } else if (i < (L/2 + 1)) { 
          add = add + 2; 
          numOfSpaces = numOfSpaces - 1; 
         } else { 
          add = add - 2; 
          numOfSpaces = numOfSpaces + 1; 
         } 
        } 
       } 
      } 
     } 
     in.close(); 
    } 
} 
+0

由于没有打开System.in,因此不应关闭包装System.in的扫描仪。如果你打开它,关闭它;如果你没有打开它,请不要关闭它。 (尽管在实践中,这里不会引起问题。) –