【0基础学Java第五课】-- 方法的使用

news2025/2/26 22:59:46

5. 方法的使用

  • 5.1 什么是方法
  • 5.2 方法定义
  • 5.3方法调用的执行过程
    • 例题:求n的阶乘和
  • 5.4 实参和形参的关系(重点)
  • 5.5 没有返回值的方法
  • 5.6 方法重载
  • 5.7 方法签名
  • 5.8 递归
  • 5.9 递归练习
    • 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    • 递归求 1 + 2 + 3 + ... + 10
    • 写一个递归方法,输入一个非负整数,返回组成它的数字之和.
    • 斐波那契数列的第N项
    • 汉罗塔递归

5.1 什么是方法

方法就是一个代码片段. 类似于 C 语言中的 “函数”。方法存在的意义(不要背, 重在体会):

  1. 是能够模块化的组织代码(当代码规模比较复杂的时候).
  2. 做到代码被重复使用, 一份代码可以在多个位置使用.
  3. 让代码更好理解更简单.
  4. 直接调用现有方法开发, 不必重复造轮子.

5.2 方法定义

修饰符 返回值类型 方法名称([参数类型 形参 …]){
方法体代码;
[return 返回值];
}
例如:方法实现闰年

    public static boolean isLeapYear(int year){
        if((0 == year % 4 && 0 != year % 100) || 0 == year % 400){
            return true;
        }else{
            return false;
        }
    }

注意

  1. 修饰符:现阶段直接使用public static 固定搭配
  2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成
    void
  3. 方法名字:采用小驼峰命名
  4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
  5. 方法体:方法内部要执行的语句
  6. 在java当中,方法必须写在类当中
  7. 在java当中,方法不能嵌套定义
  8. 在java当中,没有方法声明一说

5.3方法调用的执行过程

【方法调用过程】
调用方法—>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>回到主调方法继续往下执行

方法栈帧
在这里插入图片描述

例题:求n的阶乘和

public class Method{

    public static int fac(int n) {
        int ret = 1;
        for (int i = 1; i <= n; i++) {
            ret *= i;
        }
        return ret;
    }

    public static int facSum(int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += fac(i);
        }
        return sum;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("n的阶乘和");
        int num = scanner.nextInt();
        System.out.println(facSum(num));
    }

在这里插入图片描述
使用方法,避免使用二重循环,让代码更简单清晰。

5.4 实参和形参的关系(重点)

Java中方法的形参就相当于sum函数中的自变量n,用来接收sum函数在调用时传递的值的。形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值
如下图:形参的改变不会影响实参,结果打印的x是10,y还是20。
在这里插入图片描述

5.5 没有返回值的方法

方法的返回值是可选的. 有些时候可以没有的,没有时返回值类型必须写成void。

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        print(a, b);
    }
    public static void print(int x, int y) {
        System.out.println("x = " + x + " y = " + y);
    }

5.6 方法重载

public class Method {
    public static int add(int a,int b) {
        return a+b;
    }
    public static int add(int a,int b,int c) {
        return a+b+c;
    }
    public static double add(double c,double d) {
        return c+d;
    }

    public static void main(String[] args) {
        int x = 10;
        int y = 20;
        int ret = add(x,y);
        System.out.println(ret);

        double d1 = 10.5;
        double d2 = 12.5;
        double dd = add(d1,d2);
        System.out.println(dd);
    }

在这里插入图片描述注意

  1. 方法名必须一样
  2. 参数列表必须不同(个数,数据类型,顺序)
  3. 返回值是否一样,不影响方法重载

5.7 方法签名

在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?
方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字

5.8 递归

递 和 归都属于动词
理解 递的过程 和 归的过程 —> 什么时候 递结束/开始条件
如果没有开始结束条件,就会报错 栈溢出错误。如下图:
在这里插入图片描述递 和 归的过程:

在这里插入图片描述
例题:递归求n的阶乘

    public static void main(String[] args) {
        int ret = fac(3);
        System.out.println(ret);
    }

    public static int fac(int n) {
        if (n == 1) {
            return 1;
        }
        return n * fac(n-1);
    }

解析:
在这里插入图片描述

5.9 递归练习

按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

    public static void main(String[] args) {
            print(1234);
    }

    public static void print(int n) {
        if (n < 10) {
            System.out.print(n);
            return;
        }
        print(n/10);
        System.out.print(" "+n % 10);
    }

解析:
在这里插入图片描述

递归求 1 + 2 + 3 + … + 10

    public static void main(String[] args) {
        int ret = sum(10);
        System.out.println(ret);
    }
    public static int sum(int n) {
        if (n == 1) {
            return 1;
        }
        return n + sum(n-1);
    }

写一个递归方法,输入一个非负整数,返回组成它的数字之和.

例如,输入 1729, 则应该返回1+7+2+9,它的和是19

    public static void main(String[] args) {
        System.out.println(sumEvery(1927));
    }

    public static int sumEvery(int n) {
        if (n < 10) {
            return n;
        }
        return n%10 + sumEvery(n/10);
    }

斐波那契数列的第N项

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你计算到第几项:");
        int num = scanner.nextInt();
        System.out.println(fib(num));
    }
    public static int fib(int n) {
        if (n==1 || n==2) {
            return 1;
        }
        return fib(n-1) + fib(n-2);
    }

在这里用递归来计算会重复计算很多次,所以可以使用循环的方式来求斐波那契数列问题, 避免出现冗余运算.

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你计算到第几项:");
        int num = scanner.nextInt();
        System.out.println(fib2(num));
    }
    public static int fib2(int n) {
        int last2 = 1;
        int last1 = 1;
        int sum = 0;
        for (int i = 3; i <= n; i++) {
            sum = last1 + last2;
            last2 = last1;
            last1 = sum;
        }
        return sum;
    }

汉罗塔递归

    //pos1 起始位置
    //pos2 中转位置
    //pos3 目标位置
    public static void main(String[] args) {
        hanoi(3,'A','B','C');
    }
    public static void hanoi(int n,char pos1,char pos2,char pos3) {
        if (n == 1) {
            move(pos1,pos3);
            return;
        }
        hanoi(n-1,pos1,pos3,pos2);
        move(pos1,pos3);
        hanoi(n-1,pos2,pos1,pos3);
    }
    public static void move(char pos1,char pos2) {
        System.out.print(pos1 + "-> " + pos2 + " ");
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1158569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python语言速回顾】——爬虫基础知识

目录 一、爬虫概述 1、准备工作 2、爬虫类型 3、爬虫原理 二、爬虫三大库 1、Requests库 2、BeautifulSoup库 3、Lxml库 一、爬虫概述 爬虫又称网络机器人&#xff0c;可以代替人工从互联网中采集、整理数据。常见的网络爬虫主要有百度公司的Baiduspider、360公司的36…

电脑MSVCP120.dll丢失的解决办法,快速有效解决策略

在日常电脑使用过程中&#xff0c;我们可能会遇到一种情况&#xff0c;即打开某些程序或者游戏时&#xff0c;突然弹出一个错误提示&#xff0c;告诉我们"找不到MSVCP120.dll"文件&#xff0c;使得程序不能正常运行。本篇文章就带大家了解MSVCP120.dll以及MSVCP120.d…

springmvc 讲解(2)

系列文章目录 springmvc讲解&#xff08;1 &#xff09;点击此处即可 文章目录 系列文章目录一、Springmvc发送数据1、快速跳转页面1.1 开发模式讲解1.2 jsp简述1.3 页面跳转控制1.4 转发和重定向 2、返回json数据2.1 ResponseBody 注解2.2 RestController注解 3、访问静态资源…

Rust编程基础之6大数据类型

1.Rust数据类型 在 Rust 中, 每一个值都属于某一个 数据类型&#xff08;data type&#xff09;, 这告诉 Rust 它被指定为何种数据&#xff0c;以便明确数据处理方式。我们将看到两类数据类型子集&#xff1a;标量&#xff08;scalar&#xff09;和复合&#xff08;compound&a…

【Git】Git暂存使用

当我们正常使用Git切换分支时&#xff0c;会出现以下提示&#xff08;请在切换分支之前提交您的更改或隐藏它们&#xff09;&#xff1a; Please commit your changes or stash them before you switch branches. 这是由于你现有分支上有修改还没有commit&#xff0c;而你又选择…

汽车配件商城小程序制作 | 汽车配件售卖,高门槛但高利润

通过汽车配件商城小程序给别人的供货&#xff0c;利润可高达60%&#xff0c;但甚少有人关注汽车配件销售的行业。具体情况是怎么样的呢&#xff0c;下面给大家简单分析。 据数据显示&#xff0c;国内有4亿多辆汽车&#xff0c;这些汽车坏了要修&#xff0c;也要偶尔进行保养&am…

6个免费可商用的高清图片素材网站

找免费课商用图片就上这6个网站&#xff0c;高质量无水印&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要为新手设计师提供免费素材&#xff0c;这些素材的质量都很高&#xff0c;类别也很多&#xff0c;像平面、UI、电…

递归函数实现省市区多级联动搜索帮助

1、需求背景 当程序中有互为层级的字段&#xff0c;需要使用搜索帮助时&#xff0c;可以通过多次调用搜索帮助来实现。比如在程序中需要填写省市区三级地址 2、实现方式 2.1、平铺直叙 程序的搜索帮助&#xff0c;通常使用F4IF_INT_TABLE_VALUE_REQUEST来实现。多级的搜索帮…

2024上海国际人工智能展(CSITF)以“技术,让生活更精彩”为核心理念,以“创新驱动发展,保护知识产权,促进技术贸易”为主题

2024上海国际人工智能展&#xff08;CSITF&#xff09; China&#xff08;Shanghai&#xff09;International Technology Fair 时间:2024年6月12-14日 地点:上海世博展览馆 主办单位 中华人民共和国商务部 中华人民共和国科学技术部 中华人民共和国国家知识产权局 上海市…

进口跨境电商商城源码(海关179接口+海关报关+三单对碰)

海关179接口 现如今&#xff0c;跨境电商正在飞速发展&#xff0c;进口商品成为人们消费的热点。然而&#xff0c;进口商品的报关手续繁琐&#xff0c;而海关179接口的出现解决了这个问题。海关179接口是指与海关电子数据交换的商业接口&#xff0c;可以实现与海关进行数据对接…

小红书协议算法最新版

如果您想通过学习来了解小红书的点赞、关注、私信等功能的实现&#xff0c;以下是一些一般性的思路和示例代码&#xff0c;供您学习参考&#xff1a; 1. 点赞功能&#xff1a; - 后端实现&#xff1a;在后端&#xff0c;您可以创建一个用于存储用户点赞信息的数据库表。对于每…

自适应H5樱花个人网站引导页导航源码SEO增强版

懂前端和 PHP 技术想更改前端页面的可以看&#xff1a;网站的前端页面不好看&#xff0c;你可以查看 index 目录&#xff0c;内有参数 txt 文本里面记录了前端页面所使的关键 JS 代码和 php 代码&#xff0c;只需要稍加复制粘贴修改到新的前端页面就可以了&#xff01;主目录的…

【干货】分享几个免费下载音乐mp3的网站实测可用

简述 本文仅用于学习交流,不做任何声明。 分享几个免费下载音乐mp3的网站、免费音乐、 大家有找不到资源的,可以留言评论下,帮忙代下载~~ 一说 文本由PUSDN强力驱动! 有账号的朋友,可以点个赞或者评论两句哦,评论后会获得积分奖励~ wandhi【实测可用】 评价:比…

【Javascript】Javascript高级程序设计:js 事件 随手笔记

目录 一、事件概述1.1 html 与 js1.2 事件流1.3 DOM 事件流 二、事件处理程序2.1 html 事件处理程序2.2 dom0 级事件处理程序2.3 dom2 级事件处理程序2.4 IE 事件处理程序 三、事件对象四、事件类型4.1 概述4.2 UI 事件4.3 焦点事件4.4 鼠标与滚轮事件4.5 键盘与文本事件4.6 额…

Vue基本使用

上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-…

【PCIe 5.0 - 10】Memory, I/O, and Configuration Request 规则

下列规则适用于所有 Memory, I/O, Configuration Requests&#xff0c;以下是针对各类请求的附加规则。 除通用 header 字段外&#xff0c;所有 Memory, I/O, 和 Configuration Requests 还包括以下字段&#xff1a; Requester ID[15:0] 和 Tag[9:0]&#xff0c;组成 Transact…

Easy-Laser激光测平仪维修易激光对中仪E920

Easy-Laser激光对中仪常见故障&#xff1a;触摸屏损坏&#xff08;屏碎&#xff0c;不显示&#xff0c;黑屏&#xff0c;蓝屏&#xff0c;无背光等&#xff09;&#xff0c;对中仪电路板损坏&#xff0c;对中仪接收装置电路板&#xff0c;对中仪发射控制装置电路板等均可维修。…

筋膜炎能自愈吗

筋膜炎的临床表现&#xff1a; 在发病前&#xff0c;通常有过度劳累的历史&#xff0c;剧烈运动、创伤、寒冷和上呼吸道感染也可能导致这种疾病。肢体皮肤肿胀&#xff0c;或皮肤红斑和关节活动有限。侵犯部位以下的下肢&#xff0c;特别是小腿&#xff0c;其次是前臂。损伤的…

高效率、低待机功耗TUHS15F12、TUHS25F05、TUHS25F12、TUHS25F24、TUHS5F05小型板载AC/DC转换器

简介 TUHS AC-DC转换器具有高效率、低待机功耗以及内置过流和过压保护电路。这些小型板安装AC-DC转换器在保持时间和预期寿命方面具有设计灵活性。该系列具有3W至26.4W的额定输出和AC85至264V、DC120至370V的通用输入电压。工作温度范围为-40C至85C。 引脚配置 规格参数 1、…

数据结构(四)--队列及面试常考的算法

一、队列介绍 1、定义 与栈相似&#xff0c;队列是另一种顺序存储元素的线性数据结构。栈与队列的最大差别在于栈是LIFO&#xff08;后进先出&#xff09;&#xff0c;而队列是FIFO&#xff0c;即先进先出。 2、优缺点及使用场景 优点&#xff1a;先进先出&#xff08;FIFO&…