无法使我的钻石侧面对称

时间:2018-10-28 20:00:51

标签: java

我试图用/,\制作菱形,并且仅使用for循环进行敲击,如果是,但侧面错了,则右侧太大,而左侧太短。这是去学校的

public class Main
{
  public static void main (String[]args)
  {
   int n = 7;
    {
      for (int i = 0; i < n; i++)
        {
         for (int a = 0; a < (n - (i + 1)); a++)
         {
          System.out.print (" ");
         }

         for (int b = 0; b < (i * 2); b++)
         {
         if (b < n / 2)
         {
           System.out.print ("/");
         }
         else if (b == n / 2)
         {
           System.out.print ("*");
         }
           else if (b > n / 2)
         {
           System.out.print ("\\");
         }
       }
       System.out.println ();
     }

        for (int i = n - 1; i >= 0; i--)
        {
          for (int a = 0; a < (n - (i + 1)); a++)
         {
           System.out.print (" ");
         }

        for (int b = 0; b < (i * 2); b++)
        {
          if (b < n / 2)
        {
          System.out.print ("\\");
        } 
        else if (b == n / 2)
        {
          System.out.print ("*");
        }
        else if (b > n / 2)
        {
          System.out.print ("/");
        }
      }
       System.out.println ();
     }
    }
  }
}

我应该得到什么

我能得到什么:
what i get

2 个答案:

答案 0 :(得分:0)

这些问题不是真正针对SO的,而是... 因此,您做错的是您正在尝试将所有内容放入一个循环中。 尽管这是可能的,但它使代码变得复杂且难以跟踪。 我可以解决这个问题,但是您对何时打印/何时打印的估计过多。 因此,我为您简化了此操作:

执行此操作一半时间: 1.输出空格

  1. 输出/

  2. 输出*

  3. 输出\

现在在第二半做相反的事情。

public class Main
{
  public static void main (String[]args)
  {
   int n = 7;
    {
      for (int i = 0; i < n/2; i++)
        {
         for (int a = 0; a < (n/2-(i+1)); a++)
         {
          System.out.print (" ");
         }

     for (int b = 0; b < i; b++)
     {

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


       System.out.print ("*");

     for (int c = 0; c < i; c++)
     {

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

   }

   for (int i = n/2-1; i >= 0; i--)
    {
     for (int a = 0; a < (n/2-(i+1)); a++)
     {
      System.out.print (" ");
     }

     for (int b = 0; b < i; b++)
     {

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


       System.out.print ("*");

     for (int c = 0; c < i; c++)
     {

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

   }

 }
 }
}

答案 1 :(得分:0)

我只是重写了整个内容,只想分享;

public static void main(String[] args) {

    String star = "*";
    String for_slash = "/";
    String back_slash = "\\";
    String space = " ";

    int n = 4;
    for (int i = 0; i < n; i++) {
        String line = "";
        int d = i % n;
        for (int l = n - 1; l > 0; l--) {
            line += ((l < (d + 1)) ? for_slash : space) + space;
        }
        line += star;
        for (int l = 0; l < n - 1; l++) {
            line += space + ((l < d) ? back_slash : space);
        }
        System.out.println(line);
    }
    for (int i = 0; i < n; i++) {
        String line = "";
        int d = i % n;
        for (int l = 0; l < n - 1; l++) {
            line += ((l > (d - 1)) ? back_slash : space) + space;
        }
        line += star;
        for (int l = n - 1; l > 0 ; l--) {
            line += space + ((d < l) ? for_slash : space);
        }
        System.out.println(line);
    }
}

您可以自己编辑间距等

n = 6
          *          
        / * \        
      / / * \ \      
    / / / * \ \ \    
  / / / / * \ \ \ \  
/ / / / / * \ \ \ \ \
\ \ \ \ \ * / / / / /
  \ \ \ \ * / / / /  
    \ \ \ * / / /    
      \ \ * / /      
        \ * /        
          *