数字颠倒的三角形我是Java

时间:2016-02-05 19:13:02

标签: java for-loop nested-loops

我是Java的初学者,无法弄清楚如何打印颠倒的数字三角形。每行的数值应减少1。防爆。行数; 6 打印:

666666
55555
4444
333
22
1

到目前为止,这是我想出来的; (int nr是来自用户的扫描输入)

for (int i = 1; i <= nr; i++) {

    for (int j = 1; j <=nr; j++) 
    {

        System.out.print(nr);

    }
    nr--; 
    System.out.println();

}

拥有nr--;循环越来越短,我无法弄清楚如何保持循环“nr”次,但仍然减少打印出的数字量。

4 个答案:

答案 0 :(得分:1)

你是对的,你需要写一个循环来为每个数字打印一行,从nr开始减1,直到你到达0.但你还需要在每一行打印一个可变数量的数字。为此,可以使用嵌套循环打印所需数量的数字。

由于你以nr开始打印并减少直到达到1,你可以尝试编写一个递减而不是递增的外循环。然后使用嵌套循环打印所需次数的数字。例如:

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

答案 1 :(得分:1)

在这种情况下,您可以使用一个 while 循环 和两个 递减 变量:

  • i - 行号 - 从 61
  • j - 行中的重复次数 - 从 i1
int i = 6, j = i;
while (i > 0) {
    if (j > 0) {
        // print 'i' element 'j' times
        System.out.print(i);
        --j;
    } else {
        // start new line
        System.out.println();
        j = --i;
    }
}

输出:

666666
55555
4444
333
22
1

另见:Printing a squares triangle. How to mirror numbers?

答案 2 :(得分:0)

你的问题是你正在改变,试试:

int original_nr = nr;
for (int i = 1; i <= original_nr; i++) {

    for (int j = 1; j <=nr; j++) 
    {

        System.out.print(nr);

    }
    nr--; 
    System.out.println();

}

答案 3 :(得分:0)

您不能减少nr并仍然将其用作循环的上限。实际上,您应该将nr视为不可变

相反,将外循环更改为从nr向下计数到1,将内循环从1更改为i,并打印i的值}。

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