基本功训练1——计算阶乘
利用For循环计算数字N的阶乘。实现计算阶乘的公式为“n!= n*(n-1)*(n-2)… *2 *1”。实例代码如下:
public classFactorial {
public static void main(String[] args) {
int n = 16;
long result = 1;
if ((n < 0) || (n > 17)) {
System.out.println("n的取值范围是0至17,大于17会超出long类型范围");
} else if (n == 0) {
System.out.println("0的阶乘等于1");
} else {
for (int i = n; i > 0; i--) {
result *= i;
}
System.out.println(n + "的阶乘等于:" + result);
}
}
}
可以修改变量n的值计算不同数字的阶乘。由于大于17的数值的阶乘,超过了long类型的取值范围,所以程序屏蔽了大于17的数字。另外,数学上没有负数的阶乘,所以程序要求n必须大于等于0。0的阶乘为1,所以程序直接利用if判断输出0!等于1。其它数字将使用for循环计算结果。
运行结果如图1所示。
图1 实例运行结果
基本功训练2——遍历21世纪的闰年
创建SearchLeapYear类,在该类的主方法中定义一个年历21世纪所有年份的循环,在循环中判断这些年份是否为闰年,并在控制台中把所有闰年年份输出,每行只输出5个闰年。实例代码如下:
public classSearchLeapYear {
public static void main(String[] args) {
int count=0; // 声明计数器
for (int year = 2000; year <= 2100;year++) {// 遍历21世纪年份
if (year % 4 == 0 && year %100 != 0 || year % 400 == 0) { // 是闰年
System.out.print(year + "是闰年!"); // 输出闰年
count++;// 计数器累加
if(count>4){// 每隔5个年份换行
System.out.println();
count=0;
}
}
}
}
}
实例运行结果如图1所示。
图1 实例运行结果
基本功训练3——输出空心的菱形
创建Diamond类,在该类的主方法中完成10行的空心菱形输出,实现方法是使用两个双层For循环分别输出菱形的上半部分与下半部分,实例代码如下:
public classDiamond {
public static void main(String[] args) {
int size = 10;
if (size % 2 == 0) {
size++;// 计算菱形大小
}
for (int i = 0; i < size / 2 + 1;i++) {
for (int j = size / 2 + 1; j > i+ 1; j--) {
System.out.print("");// 输出左上角位置的空白
}
for (int j = 0; j < 2 * i + 1;j++) {
if (j == 0 || j == 2 * i) {
System.out.print("*");//输出菱形上半部边缘
} else {
System.out.print("");// 输出菱形上半部空心
}
}
System.out.println("");
}
for (int i = size / 2 + 1; i < size;i++) {
for (int j = 0; j < i - size /2; j++) {
System.out.print("");// 输出菱形左下角空白
}
for (int j = 0; j < 2 * size - 1- 2 * i; j++) {
if (j == 0 || j == 2 * (size -i - 1)) {
System.out.print("*");//输出菱形下半部边缘
} else {
System.out.print("");// 输出菱形下半部空心
}
}
System.out.println("");
}
}
}
实例运行结果如图1所示。
图2 实例输出结果
基本功训练4——循环的生命力
循环是常用的开发模式,它可以简化业务处理,提高代码编写与程序运行效率,但是循环中的控制算法要掌握好,否则容易造成死循环导致程序崩溃。例如下面所演示的由于循环控制变量超出取值范围而导致的程序崩溃。
创建CycUtmost类,在该类的主方法中CycUtmost类,在该类中创建int整数类型的变量end,使其等于整数类型的最大值,然后从该值减去50开始作为循环的起始点,条件是循环控制变量小于等于end变量,在循环体中累加循环计数器,最后循环结束时显示这个计数器。实例代码如下:
public classCycUtmost {
public static void main(String[] args) {
int end=Integer.MAX_VALUE;// 定义循环终止数
int start=end-50;// 定义循环起始数
int count=0;// 定义循环计数器
for (int i = start; i <= end; i++) {// 执行循环
count++;// 循环计数
}
// 输出循环计数器
System.out.println("本次循环次数为:"+count);
}
}
读者可能会认为这个程序会循环至少50次,然后把计数器的值输出,但实际上这个程序的运行结果会导致死循环的效果,因为控制条件是检测循环控制变量是否小于或等于整数类型的最大值,当整数类型达到其最大值再累加1的时候会得到整数类型的最小值,所以它永远不可能大于end变量,这样就导致了程序的死循环,所以在程序开发时注意控制变量的取值范围。