#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
----*----
---*-*---
--*---*--
-*-----*-
*-------*
-*-----*-
--*---*--
---*-*---
----*----