Java--方法

Java–方法

package com.zy.base;

import java.math.BigDecimal;
import java.util.Scanner;

/**
 *description: Java--方法
 *@program: JavaProjectDemo
 *@author: zy
 *@create: 2023-02-13 22:56
 */
public class Method {

    /*
        修饰符 返回值类型 方法名(参数类型 参数名){
            ...
            方法体
            ...
            return 返回值
        }
        修饰符:可选,定义了该方法的访问类型,如:public/private/protected
        返回值类型:当有返回值时,书写对应的返回值数据类型,若无则为void
        方法名:方法的实际名称,与参数共同构成方法签名
        参数类型:参数列表指参数类型、顺序和参数个数。若无参数可空;
            形式参数:写在方法名之后的参数,用于接收调用方传递的实际参数
            实际参数:调用方法时实际传递的数据
        方法体:包含具体的语句,定义该方法的功能
        public int add(int a,int b){
            return a+b;
        }
        Method method = new Method();
        method.add(1,2);
     */

    public static void main(String[] args) {

        // 命令行传参给main()  扩展了解
        for (int i = 0; i < args.length; i++) {
            System.out.println("args["+i+"]"+args[i]);
        }

        // 普通方法调用
        Method method = new Method();
        System.out.println(method.add(1,2));
        System.out.println(max(1,2));

        // 可变参数方法调用
        printMax(1,3,4,2,6,5);
        printMax(new double[]{9,8,76,4,53,94});

        /*
        递归方法调用:main()-->recursive(6)-->recursive(5)-->recursive(4)
        -->recursive(3)-->recursive(2)-->recursive(1)-->结果:6*5*4*3*2*1=720
        由此可结:
            递边界条件:归方法必须设置边界(跳出递归循环判断);
            前阶段:未满足边界条件时的递归循环体;
            返回阶段:满足边界条件后的返回:n*(n-1)
        注:递归方法会消耗大量内存,当边界条件太深时,尽量不用递归
        */
         
        System.out.println("6的阶乘结果为:"+recursive(6));

        // 练习题:一个简单的计算器
        calculator();
    }

    /**
     * @Description add
     * @author zy
     * [a, b]
     * int
     * @date 2023-2-13 23:06
     */
    public int add(int a,int b){
        return a+b;
    }

    /**
     * @Description max
     * @author zy
     * [num1, num2]
     * int
     * @date 2023-2-13 23:11
     */
    public static int max(int num1,int num2){
        return num1>num2?num1:num2;
    }

    /**
     * @Description max:方法的重载:方法名相同,参数列表不同(参数个数或参数类型不同)
     * @author zy
     * [num1, num2]
     * double
     * @date 2023-2-14 21:12
     */
    public static double max(double num1,double num2){
        return num1>num2?num1:num2;
    }

    /**
     * @Description printMax:可变参数
     * 指定参数类型后加一个省略号;
     * 一个方法只能放一个可变参数且必须放在最后一位。
     * @author zy
     * [numbers]
     * void
     * @date 2023-2-14 21:32
     */
    public static void printMax(double... numbers){

        if(numbers.length==0){
            System.out.println("未传参");
            return;
        }

        double max = numbers[0];
        for (int i = 0; i < numbers.length; i++) {
            if(numbers[i]>max){
                max = numbers[i];
            }
        }

        System.out.println("最大的数为:"+max);
    }

    /**
     * @Description recursive:递归方法
     * 递归头:何时不调用自身;如果没有头将进入死循环,切记。
     * 递归体:何时调用自身。
     * @author zy
     * [n]
     * int
     * @date 2023-2-14 21:46
     * 阶乘案例:2! 2*1  3! 3*2*1
     */
    public static int recursive(int number){
        if(number == 1){
            return 1;
        }else{
            return number*recursive(--number);
        }
    }

    public static BigDecimal add(BigDecimal...numbers){
        if(numbers.length <=1){
            return null;
        }
        BigDecimal result = new BigDecimal(0);
        for (BigDecimal x:numbers){
            result = result.add(x);
        }
        return result;
    }
    public static BigDecimal subtract(BigDecimal...numbers){
        if(numbers.length <=1){
            return null;
        }
        BigDecimal result = new BigDecimal(0);
        for(int i=0;i<numbers.length;i++){
            if(i==0){
                result = numbers[i].subtract(result);
            }else{
                result = result.subtract(numbers[i]);
            }
        }
        return result;
    }
    public static BigDecimal multiply(BigDecimal...numbers){
        if(numbers.length <=1){
            return null;
        }
        BigDecimal result = new BigDecimal(1);
        for (BigDecimal x:numbers){
            result = result.multiply(x);
        }
        return result;
    }
    public static BigDecimal division(BigDecimal...numbers){
        if(numbers.length <=1){
            return null;
        }
        BigDecimal result = new BigDecimal(1);
        for(int i=0;i<numbers.length;i++){
            if(i==0){
                result = numbers[i].divide(result,2,BigDecimal.ROUND_DOWN);
            }else{
                result = result.divide(numbers[i],2,BigDecimal.ROUND_DOWN);
            }
        }
        return result;
    }
    /**
     * @Description calculator:简单的多位数字计算器(+、-、*、/)
     * @author zy
     * []
     * void
     * @date 2023-2-14 23:48
     */
    public static void calculator(){
        Scanner scanner = new Scanner(System.in);
        BigDecimal[] numbers = {};
        String operator = "";
        boolean flag = false;
        int i=0;
        System.out.println("请键入数字进行计算(+,-,*,/),数字键入完毕后请键入yes进行下一个环节!");
        while(true){
            i++;
            System.out.println("请输入第"+i+"个数:");
            if(scanner.hasNextBigDecimal()){
                if(numbers.length>0){
                    BigDecimal[] tempNumbers = numbers.clone();
                    numbers = new BigDecimal[i];
                    int j=0;
                    for (BigDecimal x:tempNumbers){
                        numbers[j] = tempNumbers[j];
                        j++;
                    }
                }else{
                    numbers = new BigDecimal[i];
                }
                numbers[i-1] = scanner.nextBigDecimal();
                if(numbers[i-1].equals(BigDecimal.ZERO)){
                    System.out.println("输入的数字不能为0,请重新输入:");
                    i--;
                    continue;
                }
                System.out.println("输入的第"+i+"个数字为:"+numbers[i-1]);
                continue;
            }else{
                if(scanner.next().equals("yes")){
                    System.out.println("数字输入完毕!");
                    break;
                }
                System.out.println("输入的不是数字,请重新输入:");
                i--;
                continue;
            }
        }

        System.out.println("请输入运算符(+,-,*,/):");
        while (!flag && scanner.hasNextLine()){
            operator = scanner.nextLine();
            if(!"".equals(operator) && !flag){
                switch (operator){
                    case "+":
                        System.out.println("输入的运算符为:"+operator+",马上进行计算请等待!");
                        System.out.println("计算结果为:"+add(numbers));
                        flag=true;
                        break;
                    case "-":
                        System.out.println("输入的运算符为:"+operator+",马上进行计算请等待!");
                        System.out.println("计算结果为:"+subtract(numbers));
                        flag=true;
                        break;
                    case "*":
                        System.out.println("输入的运算符为:"+operator+",马上进行计算请等待!");
                        System.out.println("计算结果为:"+multiply(numbers));
                        flag=true;
                        break;
                    case "/":
                        System.out.println("输入的运算符为:"+operator+",马上进行计算请等待!");
                        System.out.println("计算结果为:"+division(numbers));
                        flag=true;
                        break;
                    default:
                        System.out.println("输入的运算符错误,请重新输入:");
                        break;
                }
            }
        }

        scanner.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值