方法

6 阅读2分钟

方法重载

一个类里面有两个名字不同的方法,形参(个数、类型、参数排列顺序)不同(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;
        }
    
}