Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
153 views
in Technique[技术] by (71.8m points)

How to print x pattern in Java using for loops?

My goal is to get this output when input is 3:

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

Here is my code:

public static void PrintX (int number) {
 for (int i = 0; i <= (number * 2 + 1); i++)
   {
       for (int j = 0; j <= (number * 2 + 1); j++)
       {
           if (i == j) 
           {
               System.out.print("*");
           }
           else if (i + j == (number * 2 + 2))
           {
               System.out.print("*");
           }
           else
           {
               System.out.print(" ");
           }
       }
       System.out.println("");
   }
} 

My output when input is 3 is like this and I'm not sure why there is the extra star at the top.

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Your outer loop would work as you expect if you set an initial i value of 1. However, you could also make this a little shorter. First, consider storing the number * 2 + 1. Then you might combine a few lambda expressions with IntStream. Basically, you want to map each possible index to a " " or a "*" - so

public static void PrintX(int number) {
    int len = number * 2 + 1;
    IntStream.rangeClosed(1, len).forEachOrdered(i -> {
        IntStream.rangeClosed(0, len)
                .mapToObj(j -> i == j || i + j == len + 1 ? "*" : " ")
                .forEachOrdered(System.out::print);
        System.out.println();
    });
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...