java—如何将两个嵌套循环的输出相邻放置?

2cmtqfgy  于 2021-07-11  发布在  Java
关注(0)|答案(4)|浏览(305)

所以我现在在做一个个人项目,我做了一个程序,可以打印出星星的图案。在其中一个星型上我需要这个输入

图1


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

所以我用一种方法把这个打印出来

图2

for(int i = 1; i <= n; i++)
      {
         for(int j = 1; j <= i; j++)
         {
            System.out.print("*" + " ");
         }
         System.out.println("");
      }

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

另一种方法是打印这个

图3

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

* 

 **

***
****

*****

我的问题是:

如何将第一个方法星号放在其他方法星号的旁边(参见图1)
这就是我目前得到的

public static void printStarsVictory(int n){
      for(int i = 1; i <= n; i++)
      {
         for(int j = 1; j <= i; j++)
         {
            System.out.print("*" + " ");
         }
         System.out.println("");
      }
      for(int i=0; i<n; i++) 
      { 
         for(int j = 2 * (n-i); j >= 0; j--) 
         {           
            System.out.print(" "); 
         } 
         for(int j = 0; j<=i; j++) 
         {       
            System.out.print("* "); 
         }           
         System.out.println();
      } 
   }

这就是目前正在印刷的东西


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

    *
 **

***
****

*****

你知道怎么解决这个问题吗?提前谢谢!

sigwle7e

sigwle7e1#

我认为你走上了正确的道路你只需要将你的两个程序合并到内部for循环中:

private static void printStarsVictory(int n) {
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < n * 2; j++) {
            if (j <= i || j >= (n * 2 - i)) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
        }
        System.out.println();
    }
}

示例用法 printStarsVictory(5) :


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

示例用法 printStarsVictory(12) :


* *
**               **
***             ***
****           ****
*****         *****
******       ******
*******     *******
********   ********
********* *********
********************
**********************
***********************
nkhmeac6

nkhmeac62#

每一行都有不断增加的星数和不断减少的空间数。
e、 g.用于 n=5 第一排两边各有两颗星和8个空格。
在每次迭代中,您可以增加星号和减少空格,并将它们打印在同一行上:

public static void printStarsVictory(int n) {

    int sp = n * 2 - 2; // number of spaces

    for (int i = 1; i <= n; i++) {
        printStars(i); // print stars on the left side
        int temp = sp;
        while (temp > 0) {
            System.out.print(" ");
            temp--;
        }
        printStars(i); // // print stars on the right side
        System.out.println(""); 
        sp -= 2; // decrease spaces on each side 
    }
}

public static void printStars(int i) {
    while(i>0) {
        System.out.print("*");
        i--;
    }
}
wgx48brx

wgx48brx3#

在打印到输出之前,能否将它们保留在一个数组中:

public static void printStarsVictory(int n) {
    StringBuilder[] lines = new StringBuilder[n + 1];

    for (int i = 0; i < n; i++) {
        lines[i] = new StringBuilder();
        for (int j = 0; j <= i; j++) {
            lines[i].append("*" + " ");
        }

        for (int j = 2 * (n - i - 1); j > 0; j--) {
            lines[i].append(" ");
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 2 * (n - i - 1); j > 0; j--) {
            lines[i].append(" ");
        }
        for (int j = 0; j <= i; j++) {
            lines[i].append("* ");
        }
    }

    for (StringBuilder line : lines) {
        System.out.println(line);
    }
}
iovurdzv

iovurdzv4#

好吧,system.out.println()只打印到下一行,不打印到右边。唯一的办法就是创建一个新的算法。你应该把所有的东西都放到一个循环里。

// loop starts from 0 and user counts from 1, so we wil decrement it by 1
n--;

// this loops moves pointer vertically
for (int i = 0; i < n; i++) {

    // this loops moves pointer horisontally
    for (int j = 0; j < n*2; j++) {

        // here we choose what to print
        if (j <= i || j >= n*2-i) {
            System.out.print("*");
        } else System.out.print(" ");
    }
    System.out.println();
}

相关问题