用Java语言输出空心三角形
目标:
*
* *
* *
* *
* *
***********
思路分析
化繁为简
1. 先打印出一个矩形
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
2. 打印半个金字塔
* 第一层有一个*
* * 第二层有两个*
* * * 第三层有三个*
* * * * 第四层有四个*
* * * * * 第五层有五个*
3. 打印整个金字塔
* 第一层有一个* 2 乘以 层数 -1 有4=(总层数-1)个 空格
*** 第二层有三个* 2 乘以 层数 -1 有3=(总层数-2)个 空格
***** 第三层有五个* 2 乘以 层数 -1 有2=(总层数-3)个 空格
******* 第四层有七个* 2 乘以 层数 -1 有1=(总层数-4)个 空格
********* 第五层有九个* 2 乘以 层数 -1 有0=(总层数-5)个 空格
4. 打印空心金字塔[最难想到的]
* 第一层有一个* 当前行的位置是*,最后一个也是* 有4=(总层数-1)个 空格
* * 第二层有二个* 当前行的位置是*,最后一个也是* 有3=(总层数-2)个 空格
* * 第三层有二个* 当前行的位置是*,最后一个也是* 有2=(总层数-3)个 空格
* * 第四层有二个* 当前行的位置是*,最后一个也是* 有1=(总层数-4)个 空格
********* 第五层有九个* 2 乘以 层数 -1 全部输出* 有0=(总层数-5)个 空格
先死后活
5 层数 int totallevel = 5;
缺点:
5. 未能实现存在偶数行的输出
代码实现
public class stars
{
public static void main(String[] args)
{
byte totallevel = 10; // 层数 先死后活 可以使用键盘输入层数
for (byte i = 1; i <= totallevel; i++) // i表示层数
{
// 在输出*之前,还要输出 对应空格=总层数-当前层
for (byte k = 1; k <= totallevel - i; k++)
{
System.out.print(" ");
}
// 控制每层 * 的个数
for (byte j = 1; j <= 2 * i - 1; j++) // 重点
{
// 当前行的位置是*,最后一个也是*,最后一层全部输出*
if (j == 1 || j == 2 * i - 1 || i == totallevel)
{
System.out.print("*");
}
else
{
// 其他情况输出 空格
System.out.print(" ");
}
}
// 每打印完一层后,就换行 println 换行
System.out.println("");
}
}
}
拓展
用Java输出空心菱形
方法1(左右部分)
目标
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
思路分析:
化繁为简:
1. 先打印出一个矩形
2.打印半个菱形(左右部分)
3. 打印整个棱形
*
***
*****
*******
*********
*********
*******
*****
***
*
4. 打印空心棱形[重点:最难想到的]
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
先死后活
13 层数 int totallevel = 13;
优化:
1. 分类讨论奇数,偶数情况
2. 分类讨论输入方法,输入数据的准确型等
缺点:
- 未能实现对存在偶数行的标准输出
- 未能对奇数行和偶数行做出明确的显示方式
- 为能使用其他情况排除可能,比如:输入的数字并非整数,而是小数、字符串等
- 可用字符表示整数(字符的本质是整数)
- 目前只能在特定的的奇数且为整数(字符也可以)的条件下漂漂亮亮的输出棱形
代码实现
public class diamondone
{
public static void main(String[] args)
{
byte totallevel = 11; // 层数 先死后活 可以使用键盘输入层数
if (totallevel ></