Вывод ромбовидной формы ASCII с использованием циклов

#java #loops #nested-loops #shapes #ascii-art

#java #циклы #вложенные циклы #формы #ascii-art

Вопрос:

Я пытаюсь написать программу на Java, которая фиксирует целое число от пользователя (предположим, что данные действительны), а затем выводит ромбовидную форму в зависимости от размера целого числа, т.Е. вводимого пользователем 5 , Вывод будет:

 --*--
-*-*-
*---*
-*-*-
--*--
 

Пока у меня есть:

 if (sqr < 0) {
    // Negative
    System.out.print("#Sides of square must be positive");
}
if (sqr % 2 == 0) {
    // Even
    System.out.print("#Size ("   sqr   ") invalid must be odd");
} else {
    // Odd
    h = (sqr - 1) / 2; // Calculates the halfway point of the square
    // System.out.println();
    for (j = 0; j < sqr; j  ) {
        for (i = 0; i < sqr; i  ) {
            if (i != h) {
                System.out.print(x);
            } else {
                System.out.print(y);
            }
        }
        System.out.println();
    }
}
 

Который просто выводит:

 --*--
--*--
--*--
--*--
--*--
 

Я думал об уменьшении значения h , но это привело бы только к появлению левой стороны ромба.

Ответ №1:

 void Draw(int sqr) {
    int half = sqr / 2;
    for (int row = 0; row < sqr; row  ) {
        for (int column = 0; column < sqr; column  ) {
            if ((column == Math.abs(row - half))
                    || (column == (row   half))
                    || (column == (sqr - row   half - 1))) {
                System.out.print("*");
            } else {
                System.out.print("_");
            }
        }
        System.out.println();
    }
}
 

Хорошо, теперь это код, но, увидев комментарий С.Л. Барта, я просто понял, что это домашнее задание. Поэтому я настоятельно рекомендую вам понять, что написано в этом коде, прежде чем использовать его в качестве окончательного. Не стесняйтесь задавать любые вопросы!

Ответ №2:

Взгляните на свое состояние:

 if (i != h)
 

При этом рассматривается только номер столбца i и промежуточная точка h .
Вам нужно условие, которое смотрит на номер столбца и номер строки. Точнее, вам нужно условие, которое учитывает номер столбца, номер строки и расстояние номера столбца от промежуточной точки.
Поскольку это вопрос домашнего задания, я оставляю определение точной формулы на ваше усмотрение, но я готов дать еще несколько советов, если они вам понадобятся. Удачи!

Ответ №3:

Вы можете использовать два вложенных цикла for from -h to h , где h это половина ромба. Край ромба получается, когда:

 Math.abs(i)   Math.abs(j) == h
 

Если пользовательский ввод n=5 , то h=2 , и ромбовидный вид выглядит следующим образом:

 n=5, h=2
--*--
-*-*-
*---*
-*-*-
--*--
 

Попробуйте онлайн!

 // user input
int n = 9;
// half a diamond
int h = n / 2;
// output a diamond shape
System.out.println("n="   n   ", h="   h);
for (int i = -h; i <= h; i  ) {
    for (int j = -h; j <= h; j  ) {
        if (Math.abs(i)   Math.abs(j) == h) {
            System.out.print("*");
        } else {
            System.out.print("-");
        }
    }
    System.out.println();
}
 

Вывод:

 n=9, h=4
----*----
---*-*---
--*---*--
-*-----*-
*-------*
-*-----*-
--*---*--
---*-*---
----*----