Как напечатать данный ромб на прикрепленном изображении с той же логикой на java или любом другом языке

#java #algorithm #loops #logic

Вопрос:

Я пытался:

введите описание изображения здесь

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

 static void makeRhombus(int rows) {
    int i, j;
    int horizontal = 2 * rows;
    int vertical = rows   1;
    for (i = 1; i <= vertical; i  ) {
        /* Print trailing spaces */
        for (j = 1; j <= rows   1 - i; j  ) {
            System.out.print(" ");
        }
        /* Print stars and center spaces */
        for (j = 1; j <= 2 * rows; j  ) {
            if (i != 1 amp;amp; j == 1 || j == horizontal amp;amp; i != 1) {
                System.out.print("/");
            } else if (i == vertical || i == 1) {
                System.out.print("_");
            } else if (i == vertical amp;amp; j == 1) {
                System.out.print("/");
            } else {
                System.out.print(" ");
            }
        }
        System.out.print("n");
    }
}
 

Ответ №1:

Если разрешено использовать метод String::repeat , доступный в Java 11 , ромб ASCII может быть нарисован следующим образом:

 public static void printRhombus(int height) {
    System.out.println(" ".repeat(height)   "_".repeat(2 * height   1));
    for (int i = height - 1; i > 0; i--) {
        System.out.println(" ".repeat(i)   "/"   " ".repeat(2 * height)   "/");
    }
    System.out.println("/"   "_".repeat(2 * height)   "/");
}
 

Тесты:

 printRhombus(2);
      
printRhombus(4);
 

Выход

   _____
 /    /
/____/
    _________
   /        /
  /        /
 /        /
/________/
 

Если этот метод Java 11 недоступен/разрешен, он может быть заменен другой реализацией для возврата повторяющейся строки, например, с использованием String::join доступных в Java 8 :

 private static String repeat(String pattern, int count) {
    return String.join("", Collections.nCopies(count, pattern));
}
 

Другие способы построения повторяющейся строки могут основываться на StringBuilder цикле или создании строки из char[] заполненной N символами Arrays.fill и т. Д.