方法重载
一个类里面有两个名字不同的方法,形参(个数、类型、参数排列顺序)不同(int,double等),返回类型可以相同或不相同。仅仅返回类型不同不足以成为方法的重载。
实现理论:方法名称相同,编译器会根据调用方法的参数个数、类型等去逐个匹配,匹配失败,编译器报错。
可变参数
类型后加... (int... num1),一个方法中只能指定一个可变参数,必须是方案的最后一个参数。
递归
方法自己调用自己,用来解决一些复杂的问题。递归能不用尽量不用,如果递归次数过多,栈堆积层数多,容易导致内存崩溃
递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
递归体:什么时候需要调用自己的方法。
计算3的阶乘:
public class Hello {
public static void main(String[] args) {
System.out.println(jiecheng(3));
}
public static int jiecheng(int num){
if(num==1){
return 1;
}else{
return num*jiecheng(num-1);
}
}
}
加减计算器
import java.util.Scanner;
public class Demo01
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 1. 输入第一个数字(带循环校验)
double num1 = 0;
while (true) {
System.out.print("请输入数字1:");
if (scanner.hasNextDouble()) {
num1 = scanner.nextDouble();
break; // 输入正确,退出循环
} else {
System.out.println("❌ 输入错误,请输入数字!");
scanner.next(); // 清除错误输入,否则死循环
}
}
// 2. 输入运算符号
String operator = "";
while (true) {
System.out.print("请输入运算符号(+ 或 -):");
operator = scanner.next();
if (operator.equals("+") || operator.equals("-")) {
break;
} else {
System.out.println("❌ 符号不合法,请输入 + 或 -");
}
}
// 3. 输入第二个数字(带循环校验)
double num2 = 0;
while (true) {
System.out.print("请输入数字2:");
if (scanner.hasNextDouble()) {
num2 = scanner.nextDouble();
break;
} else {
System.out.println("❌ 输入错误,请输入数字!");
scanner.next();
}
}
// 4. 执行计算并输出结果
System.out.println("========================");
switch (operator) {
case "+":
System.out.println("结果:" + add(num1, num2));
break;
case "-":
System.out.println("结果:" + sub(num1, num2));
break;
// 防御性代码:理论上上面已经校验过了,这里只是兜底
default:
System.out.println("发生未知错误");
}
scanner.close();
}
// 加法:参数 a 是第一个数,b 是第二个数
public static double add(double a, double b) {
return a + b;
}
// 减法
public static double sub(double a, double b) {
return a - b;
}
}