首页 > 解决方案 > 我怎样才能翻转这种模式倒计时模式?

问题描述

我正在尝试创建一个倒计时模式,要求用户输入一个数字并打印一个金字塔逐行倒数到该数字。因此,如果用户输入 5,则输出应该如下所示:

        1
      2 1
    3 2 1
  4 3 2 1
5 4 3 2 1

到目前为止,我知道计算我的代码应该是这样的:

Scanner scnr = new Scanner(System.in);

int n;
int j;
int temp = 0;
System.out.println("Please enter a number 1...9 :");

n = scnr.nextInt();

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

这会打印出这个:

        1 
      1 2 
    1 2 3 
  1 2 3 4 
1 2 3 4 5 

但是我怎样才能让它在左侧数到 5?

标签: javafor-loop

解决方案


下面是解决方案Streams,对于您的方法可能会很复杂for-loop。但是您也可以对其进行转换:

  • 首先迭代给定n
  • 然后为子范围的每一行创建字符串(映射intString,并加入它们)
  • 之后,您添加额外的空格String.format
  • 最后打印出来
int n = 5;
String format = "%" + (n * 2) + "s";

IntStream.rangeClosed(1, n)
    .mapToObj(i -> IntStream.range(0, i)
        .mapToObj(j ->  i - j )
        .map(String::valueOf)
        .collect(Collectors.joining( " "))
    )
    .map(s -> String.format(format,s))
    .forEach(System.out::println);

推荐阅读