打印菱形
给出菱形的边长,在控制台上打印出一个菱形来。
为了便于比对空格,我们把空格用句点代替。
当边长为8时,菱形为:
.......*
......*.*
.....*...*
....*.....*
...*.......*
..*.........*
.*...........*
*.............*
.*...........*
..*.........*
...*.......*
....*.....*
.....*...*
......*.*
.......*
下面的程序实现了这个功能,但想法有点奇怪。
请仔细分析代码,并填写划线部分缺失的代码。
public class A
{public static void f(int n){String s = "*";for(int i=0; i<2*n-3; i++) s += ".";s += "*";String s1 = s + "\n";String s2 = "";for(int i=0; i<n-1; i++){//System.out.println("=>"+s);s = "." + _____________________________________ + "*"; //填空s1 = s + "\n" + s1;s2 += s + "\n";}System.out.println(s1+s2); }public static void main(String[] args){f(8);}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
解析:看到这样一道题目我们首选可以在横线上随便填写什么,打印一下,猜测一下结果;再者我们可以替换掉s中的点或者星来查看对应关系。其次,我们看到题目中注释了一行,这可能是给我们的提示,但实际上这里由于我们下面的s没有填好空,这里给出的打印也是找不到头绪的。我们接下来可以分析打印语句,我们发现整个代码只有最后s1+s2的一个打印,由此我们知道了,s1是上半个三角形,s2是下半个三角形,这是不同于我们平时逐行的打印的思路的。所以,我们也能猜出来,代码一定是通过对s的截取、拼接补全的s1与s2。
然后如果到这一步还没有发现规律,那么就试吧,反正是填s.substring(0, x),至于这个x的值,在这里就是s.length()-3,函数上半部分的代码,我们可以发现s每次都是由星 + 若干个点 + 星 组成的,那么每次截取出来的肯定是星+若干点的部分,进而我们根据每行点的规律可以得出结果为s.substring(0, s.length()-3)