#java #loops
#java #циклы
Вопрос:
Я пытаюсь создать рождественскую елку с введенной пользователем треугольной вершиной и прямоугольным основанием, но в настоящее время я застрял при создании базы. Спецификации следующие: треугольник начинается с одного * и увеличивает количество * в каждой строке в общей сложности на 2 в строке, так что конечная строка равна 2 (n) -1, где n является введенной высотой треугольника. Высота прямоугольника (пня) под деревом равна 1 плюс (1/5) n, а ширина пня равна 1/3n. Однако, если результат 1/3n является четным целым числом, добавьте 1 к общей ширине пня. (т. е. Ширина пня всегда является нечетным числом.) Вот что у меня есть на данный момент, треугольная часть дерева в порядке, но прямоугольная — беспорядок.
public class xmasTree {
public static final int TREE_MAXIMUM = 20;
public static final int TREE_MINIMUM = 3;
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
//User introduction
System.out.println("This program prints a "Christmas" tree. You "
"choose how big the tree will be (within reason);
// prompt for and get user input
System.out.println("How tall should the top of the tree be?");
int treeHeight = keyboard.nextInt();
while (treeHeight < TREE_MINIMUM || TREE_MAXIMUM < treeHeight) {
System.out.println("That's not a valid size. I can only do trees "
"from 3 to 20.");
System.out.println("Qutting now.");
System.exit(0);
}
//Print the top triangle section of the christmas tree
for (int i = 0; i < treeHeight; i ) {
for (int j = 0; j < treeHeight - i; j ) {
System.out.print(" ");
}
for (int k = 0; k < (2 * i 1); k ) {
System.out.print("*");
}
System.out.println();
}
//Print the bottom rectangle section of the tree
for (int c = 0; c <= (1 (treeHeight / 5)); c ) {
for (int d = 0; d <= (treeHeight / 3); d ) {
System.out.print("");
}
System.out.printf("*");
}
}
}
Если бы кто-нибудь мог помочь мне разобраться, как получить правильную форму ввода для прямоугольника, это было бы потрясающе, я знаю, что смогу центрировать его с помощью простого printf, как только он будет собран должным образом.
Комментарии:
1. Можете ли вы добавить выходные данные?
2. Чего вы ожидаете
print("")
от меня?
Ответ №1:
Во-первых, вам нужно визуализировать, каким должен быть ваш результат.
Например, n = 8
, таким образом, база должна быть 1 n/5 = 2
высокой и n / 3 = 2
скорректирована на 3
ширину.
*
***
*****
*******
*********
***********
*************
***************
***
***
В вашем коде есть следующие проблемы:
print("")
это бессмысленное утверждение. Это ничего не дает.- Вы не печатаете никаких начальных пробелов для отступов.
- Вы не печатаете
*
для количества, равного ширине базы. - Вы не вызываете
println()
поэтому базовая высота определенно не будет работать.
Вы хорошо справились с частью дерева, так что у вас действительно не должно возникнуть проблем с этим. Я не дам вам ответа, но, надеюсь, этот наглядный пример поможет вам сделать это самостоятельно.
Ответ №2:
И если вы заставите свой цикл for начинаться с 0, то не используйте знак равенства, так как он будет работать на 1 раз больше, чем вы ожидаете
Ответ №3:
У вас почти получилось, всего пара комментариев к вашему коду:
- В последнем for вам следовало использовать < вместо <=, как вы делали в начале
- У вас были четкие правила, поэтому вам просто нужно было записать их в свой код, как я сделал в своем коде, попробуйте сделать это более понятным, найдите высоту и ширину пня, прежде чем записывать его
-
Во внутреннем for вы должны были распечатать *, а во внешнем for вам просто нужно было напечатать новую строку
Клавиатура сканера = новый сканер (System.in );
//User introduction System.out.println("This program prints a "Christmas" tree. You " "choose how big the tree will be (within reason)"); // prompt for and get user input System.out.println("How tall should the top of the tree be?"); int treeHeight = keyboard.nextInt(); while (treeHeight < TREE_MINIMUM || TREE_MAXIMUM < treeHeight) { System.out.println("That's not a valid size. I can only do trees " "from 3 to 20."); System.out.println("Qutting now."); System.exit(0); } //Print the top triangle section of the christmas tree for (int i = 0; i < treeHeight; i ) { for (int j = 0; j < treeHeight - i; j ) { System.out.print(" "); } for (int k = 0; k < (2 * i 1); k ) { System.out.print("*"); } System.out.println(); } //Print the bottom rectangle section of the tree int stumpHeight = (1 (treeHeight / 5)); int stumpWidth; if ((treeHeight / 3) % 2 == 0) { //it is even add 1 stumpWidth = (treeHeight / 3) 1; } else { //it is odd keep it like that stumpWidth = (treeHeight / 3); } for (int c = 0; c < stumpHeight; c ) { //sorry for adding the spaces but I don't like the incomplete answers //centering for (int d = 0; d < treeHeight - stumpWidth/2; d ) { System.out.print(" "); } //adding stump for (int d = 0; d < stumpWidth; d ) { System.out.print("*"); } //going to the next line System.out.println(); }