如何在java中创建带循环的模式

时间:2015-12-07 02:11:53

标签: java loops

public class NestedLoopPattern {
    public static void main(String[] args) {
        final int HASHTAG_AMMOUNT = 6;

        for (int i=0; i < HASHTAG_AMMOUNT; i++) {
            System.out.println("#");
            for (int j=0; j < i; j++) {
                System.out.print(" ");
            }
            System.out.println("#");
        }
    }
}

我应该用嵌套循环制作这个模式,但是使用上面的代码我不能

##
# #
#  #
#   #
#    #
#     #

我只是继续把它作为我的输出:

#
#
#
 #
#
  #
#
    #
#
      #
#
         #

3 个答案:

答案 0 :(得分:1)

您错误地为System.out.println()调用了第一个哈希标记,该标记正在打印您不想要的换行符。只需将该调用更改为System.out.print(),您就应该这样做了:

 public class NestedLoopPattern {
     public static void main(String[] args) {
         final int HASHTAG_AMMOUNT = 6;

         for (int i=0; i < HASHTAG_AMMOUNT; i++) {
             // don't print a newline here, just print a hash
             System.out.print("#");
             for (int j=0; j < i; j++) {
                 System.out.print(" ");
             }
             System.out.println("#");
         }
     }
}

<强>输出:

##
# #
#  #
#   #
#    #
#     #

答案 1 :(得分:1)

问题是在外循环的每次迭代中,您都要打印两个换行符。因此,您打印第一个&#34;#&#34;,然后打印换行符,然后打印其余部分。

您需要将第一个System.out.println("#");更改为System.out.print("#");,然后才能生效。

因此,您应该将代码更改为:

public class NestedLoopPattern {
    public static void main(String[] args) {
        final int HASHTAG_AMMOUNT = 6;

        for(int i = 0; i < HASHTAG_AMMOUNT; i++) {
             System.out.print("#"); //No need to print a newline here

             for(int j = 0; j < i; j++) {
                 System.out.print(" ");
             }

             System.out.println("#");
         }
     }
}

这将为您提供预期的输出:

##
# #
#  #
#   #
#    #
#     #

答案 2 :(得分:0)

解决方案:

IntStream.rangeClosed(1, MAX)
                .forEach(i -> IntStream.rangeClosed(1, i + 1)
                        .mapToObj(j -> j == i + 1 ? "#\n" : j == 1 ? "# " : "  ")
                        .forEach(System.out::print)
                );