初学JAVA输出空心菱形行数分析技巧
在开始学习Java语言编程时,需要反复做一些练习题,以巩固所学的知识,以下一个案例,输出空心菱形,使用for循环和If语句实现,其中判断每一行的数量运用数学思想理解起来更容易一些。
package part;
import java.util.Random;
public class cha1 {
public static void main(String[] args){
Random rand = new Random();
//控制台输出一个随机生成的的10-20之间行数的空心菱形
final int R = 10+rand.nextInt(11);
System.out.println("随机生成菱形上半部分行数:"+R);
for(int i = -R,m;i <= R;i++){
for(int k = 1;k <= Math.abs(i);k++){
System.out.print(" ");
}
m = 2*R+1-2*Math.abs(i);
for(int k = 1;k <= m;k++){
if(R == Math.abs(i) || k == 1 || k == m){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
输出为:
随机生成菱形上半部分行数:5
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
大家可以看到,第一个运用函数思想在k <= Math.abs(i),在*前面先输入空格,其中空格个数为连续数,最中间是没有空的,中间一行是顶格的,怎么理解k <= Math.abs(i),更好一些呢,大家可以从数学角度,看成函数,从最中间一行往下理解,数字是1,2,3,4,。。。,正是一次函数y = kx这样一个函数,这样理解就好理解一些,因为上面i是从负的开始,所以符合函数y = k|x|,即k <= Math.abs(i),所以分析函数就从中间一行,往下看,数字变化规律,函数很容易理解的就得出来了。
同样道理,去判断下一个for循环中k的范围,我们看出图形的变化规律是1,3,5,7,9,11,9,7,5,3,1,。。。这样的规律,公差为2的等差数列,k应该小于等于多少呢,同样的方法,看下半部分,从中间往下看,先看中间一行,这是i=6,R等于5,中间数字是11,从中间看往下,越来越小,减函数,y= b-2x,大概形式是这样,根据x=6,y= 11,R=5,所以y=2R+1-2x,即2R+1-2*Math.abs(i),这样理解会更加直观一些。这道题上下图形对称,初值取负,加上绝对值更加简便。希望这样思考能够帮助大家更好理解k后面的值到底取什么。