#java
#java
Вопрос:
Вот как это должно выглядеть
9 8 7 6 5 4 3 2 1 0
8 8 7 6 5 4 3 2 1 0
7 7 7 6 5 4 3 2 1 0
6 6 6 6 5 4 3 2 1 0
5 5 5 5 5 4 3 2 1 0
4 4 4 4 4 4 3 2 1 0
3 3 3 3 3 3 3 2 1 0
2 2 2 2 2 2 2 2 1 0
1 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0
Вот моя попытка.
public class Main {
public static void main(String[] args) {
int i = 9;
int count = -1;
while (i >= count) {
int j = i;
while (j > count) {
System.out.print(j " ");
j--;
}
System.out.println();
count ;
}
}
}
Вот мой фактический результат:
9 8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2
9 8 7 6 5 4 3
9 8 7 6 5 4
9 8 7 6 5
9 8 7 6
9 8 7
9 8
9
Это, очевидно, не соответствует ожидаемому результату. Может кто-нибудь указать, где ошибка в коде?
Комментарии:
1. Hine для вас: 2 цикла!!!
2. Разбейте проблему на более мелкие части. Попробуйте распечатать первую строку. Как только у вас это получится, попробуйте распечатать вторую строку. Затем третий. После успешной печати 3 строк вы должны увидеть шаблон, который вы можете реализовать для остальных строк.
Ответ №1:
Это решение, которое имеет правильный вывод, но вместо использования циклов while я использовал циклы for
public class Main {
public static void main(String[] args) {
int count1 = 9;
for (int i = count1; i >= 0; i--) {
int count2 = i;
if (count1 > count2) {
int tmp = count1 - count2;
for (int j = tmp; j > 0; j--) {
System.out.print(count2 " ");
}
}
for (int j = count2; j >= 0; j--) {
System.out.print(j " ");
}
System.out.println();
}
}
}
Ответ №2:
Вы можете сохранить две внешние переменные counter
и multiplier
для размера матрицы и количества повторений соответственно:
public class Main {
public static void main(String[] args) {
int counter = 15;
int multiplier = 1;
for (int i = counter; i >= 0; i--) {
for (int j = 0; j<multiplier; j ) {
System.out.printf("=", counter); //using = for spacing numbers nicely
}
for (int k = counter-1; k >= 0; k--) {
System.out.printf("=", k);
}
multiplier;
--counter;
System.out.println();
}
}
}
Для каждой горизонтальной строки, где счетчик уменьшается, а множитель увеличивается (9 один раз в 1-й строке; 8 дважды во второй строке и т. Д.):
- сначала он будет печатать
counter
,multiplier
раз; - затем он заполнит оставшуюся часть строки числом
counter-multiplier
целых чисел по убыванию, начиная сcounter-1
; - в конце каждой итерации внешнего цикла печатается новая строка.
Вывод будет:
9 8 7 6 5 4 3 2 1 0
8 8 7 6 5 4 3 2 1 0
7 7 7 6 5 4 3 2 1 0
6 6 6 6 5 4 3 2 1 0
5 5 5 5 5 4 3 2 1 0
4 4 4 4 4 4 3 2 1 0
3 3 3 3 3 3 3 2 1 0
2 2 2 2 2 2 2 2 1 0
1 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0
Ответ №3:
Поскольку у вас уже есть свой ответ, вот несколько альтернатив.
String str = "9 8 7 6 5 6 3 2 1 0";
System.out.println(str);
for (int i = 9; i > 0; i--) {
str = str.replace(i "",(i-1) "");
System.out.println(str);
}
Или используйте String.repeat
метод.
for (int i = 9; i >= 0; i--) {
System.out.print((i " ").repeat(9-i));
for(int k = i; k >= 0; k--) {
System.out.print(k " ");
}
System.out.println();
}
Ответ №4:
С помощью Java8 stream вы можете написать код, как показано ниже:
public static void main(String[] args) {
IntStream.range(0, 10)
.forEach(i -> {
IntStream.range(0, 10).forEach(j -> {
System.out.print((9- (j < i ? i : j)) " " );
});
System.out.println("");
});
}