一、动手动脑问题
(一)随机数生成相关
依据特定算法编写方法生成指定数目随机整数:已知纯随机数发生器的参数为 Modulus = 2³¹ - 1 = int.MaxValue、Multiplier = 7⁵ = 16807、C = 0,且当显示过 2³¹ - 2 个数之后才可能重复,要求编写一个方法,使用该算法生成指定数目(如 1000 个)的随机整数。
分析可变参数方法代码特性:观察以下代码,找出其特殊之处
java
运行
public class Method0verload {
public static void main(String[] args){
System.out.println("The square of integer 7 is"+ square(7));
System.out.println("\nThe square of double 7.5 is "+ square(7.5));
}
public static int square(int x){
return x * x;
}
public static double square(double y){
return y * y;
}
}
探究 JDK 中 System.out.println () 方法特点:查看 JDK 中 System.out.println () 方法,分析其是否存在方法重载等特性。
对比递归与递推求 n!:现场演示使用递推的方法求 n!,并与递归求 n! 的方式进行对比,理解两种方法 “由后至前再回来” 与 “从前到后” 的不同思路。
(二)数据处理相关
分析 CalculateN 示例程序 BUG:观察 CalculateN 示例程序中阶乘数出现负数的情况,探究为何会出现该 BUG,理解 int 类型数值范围的限制。
浮点数比较问题:已知代码
java
运行
double i = 0.0001;
double j = 0.00010000000000000001;
System.out.println(ij); //输出:true
思考为何会出现这种结果,以及正确比较两个浮点数是否相等的方法。
二、课后实验性问题
(一)四则运算题目生成程序开发
阶段 1:在二十分钟内编写一个能自动生成 30 道小学四则运算题目的 “软件”。
阶段 2:对阶段 1 的程序进行功能升级,具体要求如下
题目避免重复,减法不允许出现负数,乘法结果不允许出现四位数,除法必须整除且不允许出现小数。
实现在线实时答题功能,答题结束后,统计并显示错题数和正确率。
增加倒计时功能,要求在指定时间内完成测试,超时未做完的题目视为错题,且上述新增内容需编写方法实现。
(二)大整数处理
使用 BigInteger 类编写方法计算 n!:鉴于 int 类型数值范围有限,当计算较大的 n! 时会出现错误结果,要求使用 Java 提供的 BigInteger 类,编写一个方法 calculateN2 (int n) 来计算 n!,参考代码框架如下
java
运行
public static BigInteger calculateN2(int n) {
if(n1 || n==0)
{
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(n).multiply(calculateN2((n-1)));