我需要解决以下问题。 该程序具有三个输出:一个三角形和两棵圣诞树。我已经成功地打印了三角形,但是我不知道如何使我的树工作。这是练习40的链接:https://materiaalit.github.io/2013-oo-programming/part1/week-2/
请注意,这不是我的工作。我正在家里学习如何自己编写代码。
代码如下:
public static void xmasTree(int height) {
for (int i = 1; i <= height; i++ ) {
printWhitespaces(height - 1);
printStars( i );
}
for( int j = 2; j <= height; j++ ){
printWhitespaces ( height - j );
printStars ( j - 1 );
}
}
这必须是最终输出:
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
***
***
但是我明白了:
*
**
***
****
*****
******
*******
********
*********
**********
*
**
***
****
*****
******
*******
********
*********
答案 0 :(得分:6)
首先,习惯于使用0作为循环中的第一个值,而不是1。这需要一些时间来适应,但是5或6年后它会很自然:-)
您那里肯定有一个逻辑问题。树顶部的每一行应从height - i -1
(而不是height - 1
)开始,并包含i * 2 + 1
个星号(而不是i
)。
后备箱有类似的问题,但我会把它留给您作为练习(因为这很重要!)。
答案 1 :(得分:3)
写下您需要做的事情。
每行包括缩进空间和树状星空,因此请写下您需要的空间。
由于您将使用循环,例如从0
到height - 1
计数,也记下迭代器值
height = 10
* 9 spaces, 1 stars, i = 0
*** 8 spaces, 3 stars, i = 1
***** 7 spaces, 5 stars, i = 2
******* 6 spaces, 7 stars, i = 3
********* 5 spaces, 9 stars, i = 4
*********** 4 spaces, 11 stars, i = 5
************* 3 spaces, 13 stars, i = 6
*************** 2 spaces, 15 stars, i = 7
***************** 1 spaces, 17 stars, i = 8
******************* 0 spaces, 19 stars, i = 9
*** 8 spaces, 3 stars
*** 8 spaces, 3 stars
现在看看是否可以辨别出图案:
spaces = height - 1 - i
stars = 2 * i + 1
对于树干,您循环2
次,使用height - 2
个空格和3
个星,除非树干当然需要以某种树高调整大小,但是您没有请为此指定任何规则。
答案 2 :(得分:0)
public static void xmasTree(int height) {
// cone
for (int i = 1; i <= height; i++ ) {
printWhitespaces(height - i);
printStars( i );
printStars( i-1 );
System.out.println();
}
// trunk
for(int i=1 ; i<=4; i++){
printWhitespaces(height - height/4 -1);
printStars(height/2);
System.out.println();
}
}
说明:
用于打印锥体:
____h-1__*__h-1____
// h-i。在这里,星数= 2i-1。位于位置i的星星变为中点
___h-1__***___h-1__
__h-2__*****__h-2__
以此类推
对于后备箱(假设宽度有所变化):
__h/4__*****__h/4__
//躯干宽度= h / 2
__h/4__*****__h/4__
以此类推。
但是如其他答案所述,最好以0循环开始:
public static void xmasTree(int height) {
// cone
for (int i = 0; i < height; i++ ) {
printWhitespaces(height - i - 1);
printStars( i+1 );
printStars( i );
System.out.println();
}
// trunk
for(int i = 0 ; i<4; i++){
printWhitespaces(height - height/4 -1);
printStars(height/2);
System.out.println();
}
}