Java I';I’我很难做出有环的菱形

Java I';I’我很难做出有环的菱形,java,for-loop,nested-loops,Java,For Loop,Nested Loops,您有一个n的输入,它表示菱形将有一半的行。上半场我能打出钻石,但下半场我非常沮丧。我就是不明白。我来这里不是要问我需要的具体代码,但是你能给我指出正确的方向,并给我一些如何编写这些代码的技巧吗?另外,如果我用错误的方式进行这个项目,请随时告诉我,告诉我应该如何进行这个项目 底部的菱形表示输入5n-1表示每个星号左侧的空格。谢谢你的帮助 公共静态无效打印菱形(int n) { 对于(int i=0;i只需反转循环: for(int i=n-1;i>=0;i--) {

您有一个
n
的输入,它表示菱形将有一半的行。上半场我能打出钻石,但下半场我非常沮丧。我就是不明白。我来这里不是要问我需要的具体代码,但是你能给我指出正确的方向,并给我一些如何编写这些代码的技巧吗?另外,如果我用错误的方式进行这个项目,请随时告诉我,告诉我应该如何进行这个项目

底部的菱形表示输入5n-1表示每个星号左侧的空格。谢谢你的帮助

公共静态无效打印菱形(int n)
{

对于(int i=0;i只需反转循环:

    for(int i=n-1;i>=0;i--)
    {
        for(int a=0;a<(n-(i+1));a++)
        {
            System.out.print(" ");
        }
        System.out.print("*");
        for(int b=0; b<(i*2);b++)
        {
            System.out.print("-");
        }
        System.out.print("*");
        System.out.println();
    }
用于(int i=n-1;i>=0;i--)
{

对于(inta=0;a只需反转循环:

    for(int i=n-1;i>=0;i--)
    {
        for(int a=0;a<(n-(i+1));a++)
        {
            System.out.print(" ");
        }
        System.out.print("*");
        for(int b=0; b<(i*2);b++)
        {
            System.out.print("-");
        }
        System.out.print("*");
        System.out.println();
    }
用于(int i=n-1;i>=0;i--)
{

对于(int a=0;a,因为已经形成了一半的菱形,只需以相反的方式再次运行循环,例如:

public static void printDiamond(int n)
{
  for (int i = 0; i < n; i++)
  {
    for (int a = 0; a < (n - (i + 1)); a++)
    {
      System.out.print(" ");
    }
    System.out.print("*");
    for (int b = 0; b < (i * 2); b++)
    {
      System.out.print("-");
    }
    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(" ");
    }
    System.out.print("*");
    for (int b = 0; b < (i * 2); b++)
    {
      System.out.print("-");
    }
    System.out.print("*");
    System.out.println();
  }
}
公共静态无效打印菱形(int n)
{
对于(int i=0;i=0;i--)
{
对于(int a=0;a<(n-(i+1));a++)
{
系统输出打印(“”);
}
系统输出打印(“*”);
对于(int b=0;b<(i*2);b++)
{
系统输出打印(“-”);
}
系统输出打印(“*”);
System.out.println();
}
}

既然已经形成了一半的菱形,只需按相反的顺序再次运行循环,例如:

public static void printDiamond(int n)
{
  for (int i = 0; i < n; i++)
  {
    for (int a = 0; a < (n - (i + 1)); a++)
    {
      System.out.print(" ");
    }
    System.out.print("*");
    for (int b = 0; b < (i * 2); b++)
    {
      System.out.print("-");
    }
    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(" ");
    }
    System.out.print("*");
    for (int b = 0; b < (i * 2); b++)
    {
      System.out.print("-");
    }
    System.out.print("*");
    System.out.println();
  }
}
公共静态无效打印菱形(int n)
{
对于(int i=0;i=0;i--)
{
对于(int a=0;a<(n-(i+1));a++)
{
系统输出打印(“”);
}
系统输出打印(“*”);
对于(int b=0;b<(i*2);b++)
{
系统输出打印(“-”);
}
系统输出打印(“*”);
System.out.println();
}
}

每当我看到某种对称性时,递归就会萦绕在我的脑海中。我只为你和其他有兴趣了解更多的人发帖。开始时,递归可能更难掌握,但因为你已经有了基于循环的解决方案,与递归的对比将清楚地勾勒出优点和缺点。我的建议,不要错过进入的机会:)

递归解决方案:

static int iteration = 0;
public static void printDiamond(int n) {
    int numberOfBlanks = n - iteration;
    int numberOfDashes = iteration * 2;
    String blank = new String(new char[numberOfBlanks]).replace("\0", " ");
    String dash = new String(new char[numberOfDashes]).replace("\0", "-");
    String star = "*";
    String row = blank + star + dash + star + blank;

    // printing the rows forward
    System.out.println(row);
    iteration++;
    if (iteration < n) {
        printDiamond(n);
    }
    // printing the rows backward
    System.out.println(row);
}
然后递归停止,其余的代码按相反的顺序执行

continuing after 5 iteration row =   *--------* 
continuing after 4 iteration row =    *------*  
continuing after 3 iteration row =     *----*   
continuing after 2 iteration row =      *--*    
continuing after 1 iteration row =       **

我没有研究它背后的机制,有很多资源,这只是为了让你感兴趣。希望它能帮助你,最好的

每当我看到一种对称时,递归就会萦绕在我的脑海中。我只为你和其他有兴趣了解更多的人发帖。开始时,递归可能更难掌握,但因为你已经有了基于循环的解决方案与递归相比,递归将清楚地勾勒出其优缺点。我的建议是,不要错过进入递归的机会:)

递归解决方案:

static int iteration = 0;
public static void printDiamond(int n) {
    int numberOfBlanks = n - iteration;
    int numberOfDashes = iteration * 2;
    String blank = new String(new char[numberOfBlanks]).replace("\0", " ");
    String dash = new String(new char[numberOfDashes]).replace("\0", "-");
    String star = "*";
    String row = blank + star + dash + star + blank;

    // printing the rows forward
    System.out.println(row);
    iteration++;
    if (iteration < n) {
        printDiamond(n);
    }
    // printing the rows backward
    System.out.println(row);
}
然后递归停止,其余的代码按相反的顺序执行

continuing after 5 iteration row =   *--------* 
continuing after 4 iteration row =    *------*  
continuing after 3 iteration row =     *----*   
continuing after 2 iteration row =      *--*    
continuing after 1 iteration row =       **

我没有深入研究它背后的机制,大量的资源,这只是为了让你感兴趣。希望它有帮助,best

只是一个疯狂的建议,你能不能把最上面的
中的所有声明都记下来,颠倒顺序,在现有的代码之后添加,以得到你想要的?只是一个疯狂的建议,你不能把所有的声明都记下来吗他为
设置了最顶层的
,颠倒它们的顺序,并将其添加到现有代码之后,以获得您想要的内容?