题目:使用Java实现输出如下图形。

解题关键:用循环写,分别用循环控制行数.该行内输出的空格和"*"数量
思路:1)外层for循环控制行数
2)内层循环控制该行出的空格和"*"数量
3)如果图像上下堆成,可分为上下半图像的写法
过程: 接下来我们根据我们的解题思路来一步步写代码
第一张图

1)外层for循环控制行数
for (int i = 1; i <= 3; i++) {
}
2)内层循环控制该行出的空格和"*"数量
for (int j = 2; j >= i; j--){
System.out.print(" ");//空格的数量
}
for (int j = 1; j <= (i*2 -1); j++){
System.out.print("*");//"*"的数量
}
System.out.println();//换行
完整结果如下:

为了方便大家使用,下面附上源码:
- for (int i = 1; i <= 3; i++) {
- for (int j = 2; j >= i; j--){
- System.out.print(" ");
- }
- for (int j = 1; j <= (i*2 -1); j++){
- System.out.print("*");
- }
- System.out.println();
- }
第二张图

1)上半行数
for(int i = 1; i <= 6; i++){
}
2)上半的空格数
for(int j = 5; j >= i; j--){
System.out.print(" ");
}
3)上半的"*"数量
for(int j = 1; j <= (4+i*2); j++){
System.out.print("*");
}
System.out.println();//换行
4)下半行数
for(int i = 1; i <= 5; i++){
5)上半的空格数
for(int j = 1; j <= i; j++){
System.out.print(" ");
}
6)上半的"*"数量
for(int j = 1; j <=(16 - i*2); j++){
System.out.print("*");
}
System.out.println();//换行
}
完整结果如下:

为了方便大家使用,下面附上源码:
- //1)上半行数
- for(int i = 1; i <= 6; i++){
- //2)上半的空格数
- for(int j = 5; j >= i; j--){
- System.out.print(" ");
- }
- //3)上半的"*"数量
- for(int j = 1; j <= (4+i*2); j++){
- System.out.print("*");
- }
- System.out.println();
- }
- //4)下半行数
- for(int i = 1; i <= 5; i++){
- //5)上半的空格数
- for(int j = 1; j <= i; j++){
- System.out.print(" ");
- }
- //6)上半的"*"数量
- for(int j = 1; j <=(16 - i*2); j++){
- System.out.print("*");
- }
- System.out.println();
- }
第三张图

//1)上半行数
for (int i = 1; i <= 9; i++) {
//2)上半左边空格数
for (int j = 8; j >= i; j--) {
System.out.print(" ");
}
//3)上半需要输出"*"位置
for(int j = 1; j <= (2 * i-1); j++){
if(j == 1 || j == (2 * i-1)){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();//换行
}
//4)下半行数
for(int i = 1; i <= 8 ; i++){
//5)下半左边空格数
for(int j = 1; j <= i ; j++){
System.out.print(" ");
}
//6)下半需要输出"*"位置
for(int j = 1 ; j <= (17-2*i); j++){
if(j == 1 || j == (17 - 2 * i)){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
完整结果如下:

为了方便大家使用,下面附上源码:
- //1)上半行数
- for (int i = 1; i <= 9; i++) {
- //2)上半左边空格数
- for (int j = 8; j >= i; j--) {
- System.out.print(" ");
- }
- //3)上半需要输出"*"位置
- for(int j = 1; j <= (2 * i-1); j++){
- if(j == 1 || j == (2 * i-1)){
- System.out.print("*");
- }else{
- System.out.print(" ");
- }
- }
- System.out.println();//换行
- }
- //4)下半行数
- for(int i = 1; i <= 8 ; i++){
- //5)下半左边空格数
- for(int j = 1; j <= i ; j++){
- System.out.print(" ");
- }
- //6)下半需要输出"*"位置
- for(int j = 1 ; j <= (17-2*i); j++){
- if(j == 1 || j == (17 - 2 * i)){
- System.out.print("*");
- }else{
- System.out.print(" ");
- }
- }
- System.out.println();
- }
第四张图

//1)需要循环行数
for (int i = 1; i <= 8; i++) {
//2)在该行需要输出的数据位置
for (int j = 1; j <= 15; j++) {
//需要输出的"*"位置
if (j <= (9 - i) | (j >= (7 + i))) {
System.out.print("*");
}
//需要输出的空格位置
else if (j > (9 - i) | j < (7 + i)) {
System.out.print(" ");
}
}
System.out.println();//换行
}
完整结果如下:

为了方便大家使用,下面附上源码:
- //1)需要循环行数
- for (int i = 1; i <= 8; i++) {
- //2)在该行需要输出的数据位置
- for (int j = 1; j <= 15; j++) {
- //需要输出的"*"位置
- if (j <= (9 - i) | (j >= (7 + i))) {
- System.out.print("*");
- }
- //需要输出的空格位置
- else if (j > (9 - i) | j < (7 + i)) {
- System.out.print(" ");
- }
- }
- System.out.println();//换行
- }
总结:
这几张图虽然内容不一样,但编程思想都是差不多的,我们需要理解的是在每一行哪些位置需要输出空格那些位置需要输出"*",这样的话写程序就会很简单,大家也可以试试其他的图像从中找到规律.
明日练习:输出一个整数的二进制数、八进制数、十六进制数。
大家可以自己写写,明天中午12点我准时发出我的写法哦,明天12点不见不散
一生朋友一生情,一生有你才会赢;千山万水总是情,点个关注行不行!
