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

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.mzph.cn/news/126673.shtml

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

相关文章

每天学习都很累,该怎么办?

中考淘汰一批人&#xff0c;高考又淘汰一批人&#xff0c;能杀进大学的&#xff0c;都知道高考的累。好不容易进了大学&#xff0c;却发现仍有打卡、作业、考试。 加上每天满满的课表&#xff0c;只是看看就让人心累。 为了奖学金或升学就业&#xff0c;又得去卷绩点、卷比赛、…

计算机毕业设计选题推荐-超市售货微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

操作系统:文件管理(一)文件系统基础

一战成硕 4.1 文件系统基础4.1.1 文件的基本概念4.1.2 文件控制块和索引结点4.1.3 文件的操作4.1.4 文件保护4.1.5 文件的逻辑结构4.1.6 文件的物理结构 4.1 文件系统基础 4.1.1 文件的基本概念 文件是以硬盘为载体的存储在计算机上的信息的结合。 在系统运行时&#xff0c;计…

深度神经网络的数学原理:基于超平面、半空间与线性区域的表示

概述 以前的文章主要描述了神经网络&#xff0c;即多层感知机、全连接模型的运行原理&#xff0c;还是以实验为主&#xff0c;数学描述为辅的方式&#xff0c;这篇文章以纯数学的视角来描述神经网络的运行原理&#xff0c;主要以前馈过程为主&#xff08;反向传播的动力学过程…

深度学习入门(二)之神经网络

文章目录 从感知机到神经网络神经网络的例子复习感知机激活函数 激活函数sigmoid函数阶跃函数的实现阶跃函数的图形sigmoid函数的图形sigmoid函数与阶跃函数比较非线性函数ReLU函数 多维数组的运算多维数组矩阵乘法神经网络的内积 三层神经网络的实现符号确认各层间信号传递的实…

【51单片机】LED与独立按键(学习笔记)

一、点亮一个LED 1、LED介绍 LED&#xff1a;发光二极管 补&#xff1a;电阻读数 102 > 10 00 1k 473 > 47 000 2、Keil的使用 1、新建工程&#xff1a;Project > New Project Ctrl Shift N &#xff1a;新建文件夹 2、选型号&#xff1a;Atmel-AT89C52 3、xxx…

uniapp原生插件之视频图片选择安卓原生插件

插件介绍 本地相册图片和视频多选Android扩展原生插件 插件地址 视频图片选择安卓原生插件 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 插件申请权限 存储卡读写权限 manifest.json权限列表 /* android打包配置 */"android" : {"permission…

Mozilla Firefox 119 现已可供下载

Mozilla Firefox 119 开源网络浏览器现在可以下载了&#xff0c;是时候先看看它的新功能和改进了。 Firefox 119 改进了 Firefox View 功能&#xff0c;现在可以提供更多内容&#xff0c;如最近关闭的标签页和浏览历史&#xff0c;你可以按日期或网站排序&#xff0c;还支持查…

spring 和 idea 建议不要使用 @Autowired注解

spring 和 idea 建议不要使用 Autowired注解 一. 问题描述二. 警告原因和如何去除三. 个人的收获和解决方案3. 1 个人感受3.2 通过构造函数解决警告问题 四. 小知识4.1 使用Autowired还会出现循环依赖的问题么4.2 Autowired 和 Resource区别 前言 这是我在这个网站整理的笔记,有…

vivo 自研蓝河操作系统 BlueOS 发布:支持大模型、BlueXlink 协议实现万物互联

大家好&#xff0c;我是 Lorin , 2023 年 11 月 1 日&#xff0c;在今天的 2023 年 vivo 开发者大会上&#xff0c;vivo 自主研发的蓝河操作系统&#xff08;BlueOS&#xff09;正式亮相。这款操作系统被宣传为一款面向未来的智能操作系统&#xff0c;具备出色的支持能力&#…

PlantSimulation访问本地Excel文件的方法

PlantSimulation访问本地Excel文件的方法 PlantSimulation访问本地Excel文件的方法PlantSimulation访问本地Excel文件的方法 //Param StatusTable,T_DataTable:object var T_DataTable:object:=DataTable IF NOT isComputerAccessPermittedMESSageBox("计算机访问被阻止,…

maven:编译出现Process terminated解决方法(超全)

maven:编译出现Process terminated解决方法&#xff08;超全&#xff09; 一. 情况一&#xff1a;配置文件 settings. xml 出错&#xff08;解决方法1&#xff09;1.1 项目编译报错如下&#xff1a;1.2 点击【项目名】提示找到出错文件1.3 点击查看出错文件1.4 原因及解决办法 …

大模型推理最新论文及源码合集,涵盖多模态推理、逻辑推理、数学推理

大模型推理技术的发展帮我们解决了许多的难题&#xff0c;但如今的大模型在复杂推理上的表现仍然欠佳&#xff0c;为了突破这一瓶颈&#xff0c;研究者们提出了许多创新性的方法。 我整理了其中一部分个人认为很值得学习的论文来和大家分享&#xff0c;涵盖多模态推理、逻辑推…

Agent 应用于提示工程

如果Agent模仿了人类在现实世界中的操作方式&#xff0c;那么&#xff0c;能否应用于提示工程即Prompt Engingeering 呢&#xff1f; 从LLM到Prompt Engineering 大型语言模型(LLM)是一种基于Transformer的模型&#xff0c;已经在一个巨大的语料库或文本数据集上进行了训练&…

品牌加盟商做信息展示预约小程序的效果如何

很多行业都有中部或头部品牌&#xff0c;对实体品牌企业来说想要快速高效发展&#xff0c;除了多地直营店外还需要招募加盟商进而提升生意营收。 因此线上渠道变得尤为重要&#xff0c;除了网站外&#xff0c;小程序是连接多平台生态很好的工具&#xff0c;随时打开、直接触达…

python hashlib模块及实例

hashlib 模块密码加密密码撞库密码加盐 一&#xff0c;hashlib模块 hashlib模块是用来为字符串进行加密的模块&#xff0c;通过该作用就可以为用户的密码进行加密。 通过模块中的hash算法可以为任意长度的字符串加密成长度相同的一串hash值。该hash算法得到的hash值有一下几个…

HNU-数据库系统-讨论课1

第一次小班讨论课安排如下: 主题: 大数据管理及前沿技术讨论 目的&#xff1a;让学生了解大数据管理的相关理论、技术和系统。 内容: &#xff08;1&#xff09;大数据概念、应用、技术的相关知识。 &#xff08;2&#xff09;AI4DB &#xff08;3&#xff09;DB4AI &…

vue中electron与vue通信(fs.existsSync is not a function解决方案)

electron向vue发送消息 dist/main.js (整个文件配置在另一条博客里) win new BrowserWindow({width:1920,height:1080,webPreferences: {// 是否启用Node integrationnodeIntegration: true, // Electron 5.0.0 版本之后它将被默认false// 是否在独立 JavaScript 环境中运行…

【强化学习】13 —— Actor-Critic 算法

文章目录 REINFORCE 存在的问题Actor-CriticA2C&#xff1a; Advantageous Actor-Critic代码实践结果 参考 REINFORCE 存在的问题 基于片段式数据的任务 通常情况下&#xff0c;任务需要有终止状态&#xff0c;REINFORCE才能直接计算累计折扣奖励 低数据利用效率 实际中&#…

react条件渲染

目录 前言 1. 使用if语句 2. 使用三元表达式 3. 使用逻辑与操作符 列表渲染 最佳实践和注意事项 1. 使用合适的条件判断 2. 提取重复的逻辑 3. 使用适当的key属性 总结 前言 在React中&#xff0c;条件渲染指的是根据某个条件来决定是否渲染特定的组件或元素。这在构…