简单思路
用*表示树冠
1、第一层一个、第二层三个、第三层五个,也就是说每层都会在他的上一层加两个星星
2、第一层的星星在中间。也就是第一层横线最多。第二层比第一层横线少一。思路有了接下来是代码。
3、盆的话 大家可以自由发挥。
想想中的
*
***
*****
*******
*********
***********
*************
***************
*****************
*
*
*
*
*
【----*----】
【----*----】
【---------】
----------*
---------***
--------*****
-------*******
------*********
-----***********
----*************
---***************
--*****************
-*******************
*********************
*
*
*
*
*
/** * 星星 * 星星每层加2 * 是在上一层的基础上加2 * 第一层一个 第二层3个 * 第三层5个 * 依次类推 取值都为奇数 看起来圣诞树会有层次感 * * @param in * @return */ public static String starsSum(int in, String strStars) { String tempStars = ""; in = in + 2; for (int i = 0; i < in; i++) { tempStars = tempStars + strStars; } return tempStars; } /** * 标尺 * 标尺每层减一 * 标尺第一层就是最多的一层 * 依次递减 * * @param inCount 第几层 * @return */ public static String symbolsSum(int inCount, String strRuler) { String tempSymbols = ""; for (int i = 0; i < inCount; i++) { tempSymbols = tempSymbols + strRuler; } return tempSymbols; }
/** * 画树干 * * @param inLayer 圣诞树树杉行数 * @param inRow 树干有多高 * @param strType 树干类型(样式) * @return */ public static String drawTrunk(int inLayer, int inRow, String strType) { String strNull = ""; for (int i = 0; i < inLayer; i++) { strNull = strNull + " "; } StringBuffer sbTrunk = new StringBuffer(); for (int i = 0; i < inRow; i++) { sbTrunk.append(strNull).append(strType).append("\n"); System.out.println(strNull + strType); } return sbTrunk.toString(); }
/** * 开始画圣诞树 * * @param inLayer 圣诞数层数 * @param inRow 圣诞树干多高 * @param strType 圣诞树样式 * * @param strRuler 标尺- 也可以空格 * @return */ public static String drawChristmasTree(int inLayer, int inRow, String strType, String strRuler) { //标尺 int tempIn = inLayer; //记录每行的星星 String tempStars = ""; String strBasin = ""; //返回的一个圣诞树 StringBuffer sbChristmasTree = new StringBuffer(); for (int i = 0; i < inLayer; i++) { String strSymbols = symbolsSum(tempIn--, strRuler); System.out.print(strSymbols); sbChristmasTree.append(strSymbols); //第一层 画一个星星 if (i == 0) { System.out.print(strType); sbChristmasTree.append(strType).append("\n"); System.out.println(); tempStars = strType; } else { //当前行包含多少个* int i1 = StringUtils.countMatches(tempStars, strType); tempStars = starsSum(i1, strType); System.out.println(starsSum(i1, strType)); sbChristmasTree.append(tempStars).append("\n"); } } //最后一行补充 int i = StringUtils.countMatches(tempStars, strType); tempStars = starsSum(i, strType); System.out.println(starsSum(i, strType)); sbChristmasTree.append(tempStars).append("\n"); //树干 String strTrunk = drawTrunk(inLayer, inRow, strType); sbChristmasTree.append(strTrunk).append("\n"); return sbChristmasTree.toString(); }
public static void main(String[] args) { drawChristmasTree(10, 5, "*", "-"); }
写的不好 希望大家多多指正