题目
标题:打印大X
如下的程序目的是在控制台打印输出大X。
可以控制两个参数:图形的高度,以及笔宽。
用程序中的测试数据输出效果:
(如果显示有问题,可以参看p1.png)
高度=15, 笔宽=3
*** ***
*** ***
*****
***
*****
*** ***
*** ***
高度=8, 笔宽=5
请仔细分析程序流程,填写缺失的代码。
public class A
{
static void f(int h, int w){
System.out.println(String.format(“高度=%d, 笔宽=%d”,h,w));
int a1 = 0;
int a2 = h - 1;
for(int k=0; k<h; k++){
int p = Math.min(a1,a2);
int q = Math.max(a1+w,a2+w);
for(int i=0; i<p; i++) System.out.print(" ");
if(q-p<w*2){
____________________________________________ ; //填空
}
else{
for(int i=0; i<w; i++) System.out.print("*");
for(int i=0; i<q-p-w*2; i++) System.out.print(" ");
for(int i=0; i<w; i++) System.out.print("*");
}
System.out.println();
a1++;
a2--;
}
}
public static void main(String[] args){
f(15,3);
f(8,5);
}
}
注意:只填写缺失的代码,不要拷贝已经存在的代码。
解题思路
1、 一般我们遇到这种题的解题思路就是分解法分解成上下两个图形来进行输出。所以看到p,和q难免会有点懵不知道如何下手。这里的p和q只是两个变量将以前我们需要分两部打印的图形变成一步。p,q达到一定值后p,q值反转。这里就可以给大家分享一个做图形打印填空题的小技巧。直接将代码复制的到eclipse.exe 中看他缺失的部分。这样就可惜很清晰明了的发现我们需要填写部分代码需要实现的功能。
答案:for(int i=0; i<q-p; i++) System.out.print("*"); //填空
//java代码
static void f(int h, int w){
System.out.println(String.format("高度=%d, 笔宽=%d",h,w));
int a1 = 0;
int a2 = h - 1;
for(int k=0; k<h; k++){
int p = Math.min(a1,a2);
int q = Math.max(a1+w,a2+w);
for(int i=0; i<p; i++) System.out.print(" ");//打印空格
if(q-p<w*2){//q-p<w*2中间无空格只需打印*号
for(int i=0; i<q-p; i++) System.out.print("*"); //填空
}
else{
for(int i=0; i<w; i++) System.out.print("*");//打印左边*号
for(int i=0; i<q-p-w*2; i++) System.out.print(" ");//打印中间空格
for(int i=0; i<w; i++) System.out.print("*");//打印右边*号
}
System.out.println();
a1++;
a2--;
}
}
public static void main(String[] args){
f(15,3);
f(8,5);
}
```