我是java的新手,我必须创建一个简单的java程序,以这种形式创建圣诞树:
10| * |15=7+1+7
9| *** |15=6+3+6
8| ***** |15=5+5+5
7| ******* |15=4+7+4
6| ********* |15=3+9+3
5| *********** |15=2+11+2
4| ************* |15=1+13+1
3|***************|15=0+15+0
2| *** |15=6+3+6
1| *** |15=6+3+6
高度(所有自然正数)和材料(在这种情况下,“ *”由用户输入指定)。
这是我已经拥有的,但是我不知道如何在每一行的末尾获得“ | 15 = 7 + 1 + 7”,在树的底部获得树干。
这是我的实际代码及其创建的内容:
public class Christmas{
public static void main(String[] args) {
int height = Integer.parseInt(args[0]);
String letters = (args[1]);
char firstLetter = letters.charAt(0);
//System.out.println(height+" "+firstLetter);
for (int i = 0; i < height; i++) {
// System.out.print((args.length)+"");
int row_number = height-i;
System.out.printf("%2d",row_number);
System.out.print("|");
for (int j = 1; j < height - i; j++){
System.out.print(" ");
}
for (int k = 0; k < (2 * i + 1); k++){
System.out.print(firstLetter+"");
}
System.out.println();
}
}
}
输出:
C:\Users\name\Desktop\JavaFolder>javac Christmas.java && java Christmas 10 *OMEGALUL
10| *
9| ***
8| *****
7| *******
6| *********
5| ***********
4| *************
3| ***************
2| *****************
1|*******************
如何添加总长3个字母,每棵大树的1/4的树干(四舍五入),以及每行末尾的| 15 = 7 + 1 + 7,其中包括:
树的宽度作为左侧空间的总和+相应行中的树的宽度+右侧的空间(左对齐)。
最佳答案
这是另一种方法,该方法计算行上spaces
的数量和所需的fill
字符数,然后使用printf
打印行。
public static void printChristmasTree(int height, char ch) {
if (height <= 4)
throw new IllegalArgumentException("Height must be 5 or higher");
for (int row = height; row > 0; row--) {
int spaces = (row > 2 ? row - 3 : height - 4);
int fill = (height - spaces) * 2 - 5;
System.out.printf("%2d|%s%s%s|%d=%d+%d+%d%n", row,
repeat(spaces, ' '), repeat(fill, ch), repeat(spaces, ' '),
spaces * 2 + fill, spaces, fill, spaces);
}
}
private static String repeat(int count, char ch) {
char[] buf = new char[count];
java.util.Arrays.fill(buf, ch);
return new String(buf);
}
测试
printChristmasTree(10, '*');
printChristmasTree(6, '#');
输出量
10| * |15=7+1+7
9| *** |15=6+3+6
8| ***** |15=5+5+5
7| ******* |15=4+7+4
6| ********* |15=3+9+3
5| *********** |15=2+11+2
4| ************* |15=1+13+1
3|***************|15=0+15+0
2| *** |15=6+3+6
1| *** |15=6+3+6
6| # |7=3+1+3
5| ### |7=2+3+2
4| ##### |7=1+5+1
3|#######|7=0+7+0
2| ### |7=2+3+2
1| ### |7=2+3+2
更新
这是行李箱高度
height/4
(四舍五入)的逻辑,而不是上面的代码使用的固定高度2
。行李箱宽度仍固定为3。public static void printChristmasTree(int height, char ch) {
final int trunkHeight = (height + 2) / 4; // rounded
final int treeWidth = (height - trunkHeight) * 2 - 1;
final int width = (treeWidth > 3 || trunkHeight == 0 ? treeWidth : 3);
for (int row = height; row > 0; row--) {
int fill = (row > trunkHeight ? (height - row) * 2 + 1 : 3);
int spaces = (width - fill) / 2;
System.out.printf("%2d|%s%s%s|%d=%d+%d+%d%n", row,
repeat(spaces, ' '), repeat(fill, ch), repeat(spaces, ' '),
spaces * 2 + fill, spaces, fill, spaces);
}
}
测试
printChristmasTree(5, '*');
printChristmasTree(4, '*');
printChristmasTree(3, '*');
printChristmasTree(2, '*');
printChristmasTree(1, '*');
输出量
5| * |7=3+1+3
4| *** |7=2+3+2
3| ***** |7=1+5+1
2|*******|7=0+7+0
1| *** |7=2+3+2
4| * |5=2+1+2
3| *** |5=1+3+1
2|*****|5=0+5+0
1| *** |5=1+3+1
3| * |3=1+1+1
2|***|3=0+3+0
1|***|3=0+3+0
2| * |3=1+1+1
1|***|3=0+3+0
1|*|1=0+1+0