Цикл For для печати числового шаблона не выводит правильный шаблон

#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("");
        });
    }