01‑方法 动手动脑

1、方法重载实验MethodOverload
答:
方法重载要求:方法名相同;参数列表不同,参数个数、参数类型、参数顺序任意一种不同即可。返回值类型不作为判断重载的条件。
System.out.println()就是大量重载,支持传入int、double、String、boolean等多种不同类型参数。

2、线性同余手写随机数算法
公式 next = (multiplier * seed + C) mod Modulus
Modulus=2^31‑1,Multiplier=16807,C=0。
代码:
public class MyRandom{
private static long seed;
private static final long MODULUS=(1L<<31)-1;
private static final long MULTIPLIER=16807;
public static void setSeed(long s){
seed=s;
}
public static int nextInt(){
seed=(MULTIPLIER*seed)%MODULUS;
return (int)seed;
}
public static void main(String[] args) {
setSeed(System.currentTimeMillis());
for(int i=0;i<1000;i++){
System.out.println(nextInt());
}
}
}

3、递归求n!
递归公式 f(n)=nf(n‑1);终止条件 n0 || n1 返回1。
代码:
public static int factorial(int n){
if(n0||n1){
return 1;
}
return nfactorial(n-1);
}
问题:int存储范围有限,n较大发生溢出,输出负数;大数阶乘要使用BigInteger。

4、递归和递推对比
答:
递归:函数自己调用自己,把大问题拆成规模更小的子问题,到达终止条件之后回溯计算。代码简洁,适合分治树形问题;缺点占用栈空间,容易栈溢出。
递推:使用循环,从初始已知值向后迭代计算。运行效率高,没有栈开销;部分复杂场景编写逻辑繁琐。

5、浮点数比较代码
double i = 0.0001;
double j = 0.00010000000000000001;
System.out.println(ij);
输出true。
原因:double二进制存储,两个十进制小数被保存为相同的二进制近似值。
浮点数不能直接用
判断相等;比较两个浮点数应当判断两者差值绝对值小于极小值。
示例代码:
if(Math.abs(i-j)<1e-10){
System.out.println("视为相等");
}

6、可变参数 double ... values
答:
可变参数...必须写在参数列表最后。编译阶段编译器会把可变参数封装成数组,方法内部以数组形式访问,可以传入0个或者多个参数。

7、静态方法与静态导入
答:
static修饰的静态方法,可以直接使用类名.方法名调用,不需要new创建对象。
静态导入 import static java.lang.Math.*; 导入之后可以直接写静态方法名,省略类名。

posted @ 2026-10-06 14:35  lengxia  阅读(3)  评论(0)    收藏  举报