#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
и т. Д.