Как напечатать строки в несколько строк в порядке убывания? - PullRequest
2 голосов
/ 20 апреля 2019

Я использую Java 8, и мне нужно получить этот вывод:
XXXXX
XXXX
XXX
XX
X

, где "X" - строка.

Я написал простой код:

String s = new String ("X");  
int j = 5;
for (int i = 0; i<5; i--)
{
    System.out.println(s);
j--;

    if (j < 1) 
            break;

Естественно, получите это:

X
X
X
X
X

Я понимаю, что мне нужно как-то заставить Java повторять печать строки i раз (в цикле, который я назначил для i), но не знаю как (ни повтор, ни \ я не работал).Какой лучший способ сделать это?Спасибо!

Ответы [ 5 ]

4 голосов
/ 20 апреля 2019

Все, что вам нужно сделать, это:

final String s = "X";
for (int i = 5; i > 0; i--) {
    for (int j = 0; j < i; j++) {
        System.out.print(s);
    }
    System.out.println();
}

который выводит:

XXXXX

XXXX

XXX

XX

X

1 голос
/ 20 апреля 2019

Вы можете использовать while цикл внутри for

  String s = "X";
    for (int i = 5; i > 0; i--) {
        int j=0;
        while(i>j++)
            System.out.print(s);
        System.out.println();
   }
0 голосов
/ 20 апреля 2019

concat здесь есть еще один вариант:

String s = "";
for (int i = 5; i>0; i--) {
    String s1 = "";
    for (int j = i; j > 0; j--){
        s1 += s.concat("X");
    }
    System.out.println(s1);
}
0 голосов
/ 20 апреля 2019

Вы можете использовать операцию рекурсивной печати, чтобы добиться этого без циклов.

import java.util.Collections;

public class Test {

public static void main(final String[] args) {
    recursiveTriangle(10);
}

public static void recursiveTriangle(final int length) {
    if (length <= 0 ) {
        return;
    }

    System.out.println(String.join("", Collections.nCopies(length, "X")));

    recursiveTriangle(length-1);
}

}

0 голосов
/ 20 апреля 2019

Попробуйте это с двумя внутренними циклами:

public static void main(String[] args) {
        String s = "X";

        for (int i = 5; i > 0; i--) {
            for (int j = i; j > 0; j--) {
                System.out.print(s);
            }
            System.out.println();
        }
}

Другое решение с использованием потоков Java 8

 public static void main(String[] args) {
        final String s = "X";
        IntStream.iterate(5, operand -> operand - 1)
                .limit(5)
                .forEach(value -> {
                    IntStream.range(0, value)
                            .forEach(val2 -> System.out.print(s));
                    System.out.println();
                });
}
...