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

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

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

图1

  1. * *
  2. ** **
  3. ******
  4. ********
  5. **********

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

图2

  1. for(int i = 1; i <= n; i++)
  2. {
  3. for(int j = 1; j <= i; j++)
  4. {
  5. System.out.print("*" + " ");
  6. }
  7. System.out.println("");
  8. }
  1. *
  2. **
  3. ***
  4. ****
  5. *****

另一种方法是打印这个

图3

  1. for(int i=0; i<n; i++)
  2. {
  3. for(int j = 2 * (n-i); j >= 0; j--)
  4. {
  5. System.out.print(" ");
  6. }
  7. for(int j = 0; j<=i; j++)
  8. {
  9. System.out.print("* ");
  10. }
  11. System.out.println();
  12. }
  1. *
  2. **
  3. ***
  4. ****
  5. *****

我的问题是:

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

  1. public static void printStarsVictory(int n){
  2. for(int i = 1; i <= n; i++)
  3. {
  4. for(int j = 1; j <= i; j++)
  5. {
  6. System.out.print("*" + " ");
  7. }
  8. System.out.println("");
  9. }
  10. for(int i=0; i<n; i++)
  11. {
  12. for(int j = 2 * (n-i); j >= 0; j--)
  13. {
  14. System.out.print(" ");
  15. }
  16. for(int j = 0; j<=i; j++)
  17. {
  18. System.out.print("* ");
  19. }
  20. System.out.println();
  21. }
  22. }

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

  1. *
  2. **
  3. ***
  4. ****
  5. *****
  6. *
  7. **
  8. ***
  9. ****
  10. *****

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

sigwle7e

sigwle7e1#

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

  1. private static void printStarsVictory(int n) {
  2. for (int i = 1; i <= n; i++) {
  3. for (int j = 1; j < n * 2; j++) {
  4. if (j <= i || j >= (n * 2 - i)) {
  5. System.out.print("*");
  6. } else {
  7. System.out.print(" ");
  8. }
  9. }
  10. System.out.println();
  11. }
  12. }

示例用法 printStarsVictory(5) :

  1. * *
  2. ** **
  3. ******
  4. ********
  5. *********

示例用法 printStarsVictory(12) :

  1. * *
  2. ** **
  3. *** ***
  4. **** ****
  5. ***** *****
  6. ****** ******
  7. ******* *******
  8. ******** ********
  9. ********* *********
  10. ********************
  11. **********************
  12. ***********************
展开查看全部
nkhmeac6

nkhmeac62#

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

  1. public static void printStarsVictory(int n) {
  2. int sp = n * 2 - 2; // number of spaces
  3. for (int i = 1; i <= n; i++) {
  4. printStars(i); // print stars on the left side
  5. int temp = sp;
  6. while (temp > 0) {
  7. System.out.print(" ");
  8. temp--;
  9. }
  10. printStars(i); // // print stars on the right side
  11. System.out.println("");
  12. sp -= 2; // decrease spaces on each side
  13. }
  14. }
  15. public static void printStars(int i) {
  16. while(i>0) {
  17. System.out.print("*");
  18. i--;
  19. }
  20. }
展开查看全部
wgx48brx

wgx48brx3#

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

  1. public static void printStarsVictory(int n) {
  2. StringBuilder[] lines = new StringBuilder[n + 1];
  3. for (int i = 0; i < n; i++) {
  4. lines[i] = new StringBuilder();
  5. for (int j = 0; j <= i; j++) {
  6. lines[i].append("*" + " ");
  7. }
  8. for (int j = 2 * (n - i - 1); j > 0; j--) {
  9. lines[i].append(" ");
  10. }
  11. }
  12. for (int i = 0; i < n; i++) {
  13. for (int j = 2 * (n - i - 1); j > 0; j--) {
  14. lines[i].append(" ");
  15. }
  16. for (int j = 0; j <= i; j++) {
  17. lines[i].append("* ");
  18. }
  19. }
  20. for (StringBuilder line : lines) {
  21. System.out.println(line);
  22. }
  23. }
展开查看全部
iovurdzv

iovurdzv4#

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

  1. // loop starts from 0 and user counts from 1, so we wil decrement it by 1
  2. n--;
  3. // this loops moves pointer vertically
  4. for (int i = 0; i < n; i++) {
  5. // this loops moves pointer horisontally
  6. for (int j = 0; j < n*2; j++) {
  7. // here we choose what to print
  8. if (j <= i || j >= n*2-i) {
  9. System.out.print("*");
  10. } else System.out.print(" ");
  11. }
  12. System.out.println();
  13. }
展开查看全部

相关问题