原理:利用循环语句进行打印,输出不同的星星图案
一、打印一个矩形图案: ***** ***** ***** ***** *****
分析:打一行*,然后循环5次即可
// 代码实现:
for (int i = 1; i <= 5; i++) {
System.out.println("*****");
}
// 由此可以打印出一个 5 * 5 的矩形
二、打印半个金字塔
图案: * ** *** **** *****
分析:第一行输出1个,第n行输出n个。
// 代码实现:
for (int i = 0; i < 5; i++) {
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
// 最外面的for循环代表的行,内for循环代表的是星星的个数。
三、打印整个金字塔
图案:
*
***
*****
*******
*********
分析:由空格和星星两部分组成
- 行数:5
- 空格数:4→3→2→1 (5- i ; i++)
- 星星数:1→3→5→7→9 (2*i-1 ; i++)
// 代码实现:
// 最外层的for循环代表的是行
for (int i = 1; i <= 5; i++) {
// 内第一个for循环 打印的是空格
for (int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
// 内第二个for循环 打印的是星星
for (int j = 1; j <= 2*i-1; j++) {
System.out.print("*");
}
// 每打印完一层就进行换行
System.out.println();
}
// 流程:
// 第一行:先打印4个空格,1个 *,换行
// 第二行;打印3个空格,3个 *,换行
// ...
四、打印空心金字塔
图案:
*
* *
* *
* *
*********
分析:在“三”的基础上,再加个if判断语句即可。
- 确定行数,5行;
- 左边的空格也是从 4→3→2→1 (代码保留)
for (int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
// 这是空格的代码
- 第1~4行的星星数都是由第一个和最后一个组成
for (int j = 1; j <= 2*i-1; j++) {
System.out.print("*");
}
// 在这个基础上进行if判断,如果 j是第一个,或者j是最后一个,输出星星,否则输出空格
for (int j = 1; j <= 2*i-1; j++) {
if (j == 1 || j == 2*i-1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
- 最后一行全是星星,所以可以在“3”的基础上再加个判断,当行数是最后一行时,输出星星
for (int j = 1; j <= 2*i-1; j++) {
if (j == 1 || j == 2*i-1 || i == 5){
System.out.print("*");
}else {
System.out.print(" ");
}
}
// i == 5 即最后一行
接下里是完整代码的实现:
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5-i; j++) {
System.out.print(" ");
}
// 打印的是空格
for (int j = 1; j <= 2*i-1; j++) {
// 因为只有第一个和最后一个是星星 所以中间用空格代替
if (j == 1 || j == 2*i-1 || i==5){
System.out.print("*");
}else {
System.out.print(" ");
}
}
// 打印的是星星
System.out.println();
// 每打印完一层就进行换行
}
五、把行数变量化,输出x行的空心金字塔
分析:在“四”的基础上,把行数用一个变量名替换,即可实现想要的效果~
// 实现一个6行的空心三角形
int line_number = 6;
// 定义一个变量,然后把数字换成变量
for (int i = 1; i <= line_number; i++) {
for (int j = 1; j <= line_number-i; j++) {
System.out.print(" ");
}
// 打印的是空格
for (int j = 1; j <= 2*i-1; j++) {
// 因为只有第一个和最后一个是星星 所以中间用空格代替
if (j == 1 || j == 2*i-1 || i==line_number){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
// 所以只要改变line_number,就能实现不同的效果
图案:
*
* *
* *
* *
* *
***********
六、总结
- 可以在“五”的基础上去,加Scanner,键盘控制输出图案,十分有趣。
- 尝试把矩形给镂空,步骤跟“四”一样。
- 构思图案时,可以用笔在纸上画出来,一步一步去推算,然后把想法给到代码。
图案:
* *
* * * *
* * *
* *
* *
*
// 代码实现
for (int i = 1; i <= 3 ; i++) {
for (int j = 1; j <= i ; j++) {
if (j == 1 && i == 2 ){
System.out.print(" *");
// 一个空格
}else if (j == 1 && i == 3 ){
System.out.print(" *");
// 一个空格
}else{
System.out.print(" ");
// 二个空格
}
// 判断是不是第二,三行的第一个,如果是输出星星
}
for (int j = 5; j >= 2*i-1 ; j--) {
if (j == 5 || j == 2*i-1){
System.out.print(" *");
// 一个空格
} else{
System.out.print(" ");
// 二个空格
}
if (j == 3 && i == 2){
System.out.print(" *");
// 三个空格
}// 第二行的第七个
if (j == 5 && i == 3){
System.out.print(" *");
// 五个空格
}
}
System.out.println();
}
// System.out.println("----------------------");
for (int i = 1; i <= 3 ; i++) {
for (int j = 1; j <= i ; j++) {
System.out.print(" ");
// 二个空格
}
for (int j = 5; j >= 2*i-1 ; j--) {
if (j == 5 || j == 2*i-1){
System.out.print(" *");
// 一个空格
}
else{
System.out.print(" ");
// 一个空格
}
}
System.out.println();
}
思路:我是三行,三行的做。



