Java—方法的使用

代码示例: 计算 1! + 2! + 3! + 4! + 5!

public static void main(String[] args) {

int sum = 0;

for (int i = 1; i <= 5; i++) {

sum += factor(i);

}

System.out.println("sum = " + sum);

}

public static int factor(int n) {

System.out.println("计算 n 的阶乘中! n = " + n);

int result = 1;

for (int i = 1; i <= n; i++) {

result *= i;

}

return result;

}

以N!为例画图讲解

public static int fac(int n){

if(n==1){

return 1;

}

int tmp = n * fac(n-1);

return tmp;

}

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

int y = fac(n);

System.out.println(y);

}

4,实参和形参的关系


代码示例: 交换两个整型变量

public static void main(String[] args) {

int a = 10;

int b = 20;

swap(a, b);

System.out.println("a = " + a + " b = " + b);

}

public static void swap(int x, int y) {

int tmp = x;

x = y;

y = tmp;

}

原因分析

刚才的代码, 没有完成数据的交换.

对于基础类型来说, 形参相当于实参的拷贝. 即传值调用

int a = 10;

int b = 20;

int x = a;

int y = b;

int tmp = x;

x = y;

y = tmp;

可以看到, 对 x 和 y 的修改, 不影响 a 和 b.

解决办法: 传引用类型参数 (例如数组来解决这个问题)

public static void main(String[] args) {

int[] arr = {10, 20};

swap(arr);

System.out.println("a = " + arr[0] + " b = " + arr[1]);

}

public static void swap(int[] arr) {

int tmp = arr[0];

arr[0] = arr[1];

arr[1] = tmp;

}

5,没有返回值的方法


方法的返回值是可选的. 有些时候可以没有的

代码示例

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);

}

二,方法的重载

===========

1,重载要解决的问题


代码示例

class Test {

public static void main(String[] args) {

int a = 10;

int b = 20;

int ret = add(a, b);

System.out.println("ret = " + ret);

double a2 = 10.5;

double b2 = 20.5;

double ret2 = add(a2, b2);

System.out.println("ret2 = " + ret2);

}

public static int add(int x, int y) {

return x + y;

}

}

// 编译出错

//Test.java:13: 错误: 不兼容的类型: 从double转换到int可能会有损失

// double ret2 = add(a2, b2);

那么是不是应该创建这样的代码呢?

class Test {

public static void main(String[] args) {

int a = 10;

int b = 20;

int ret = addInt(a, b);

System.out.println("ret = " + ret);

double a2 = 10.5;

double b2 = 20.5;

double ret2 = addDouble(a2, b2);

System.out.println("ret2 = " + ret2);

}

public static int addInt(int x, int y) {

return x + y;

}

public static double addDouble(double x, double y) {

return x + y;

}

}

这样的写法是对的(例如 Go 语言就是这么做的), 但是 Java 认为 addInt 这样的名字不友好, 不如直接就叫 add

2,使用重载


代码示例

public static void main(String[] args) {

int a = 10;

int b = 20;

int ret = add(a, b);

System.out.println("ret = " + ret);

double a2 = 10.5;

double b2 = 20.5;

double ret2 = add(a2, b2);

System.out.println("ret2 = " + ret2);

double a3 = 10.5;

double b3 = 10.5;

double c3 = 20.5;

double ret3 = add(a3, b3, c3);

System.out.println("ret3 = " + ret3);

}

public static int add(int x, int y) {

return x + y;

}

public static double add(double x, double y) {

return x + y;

}

public static double add(double x, double y, double z) {

return x + y + z;

}

方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数 字相加. 同一个方法名字, 提供不同版本的实现, 称为 方法重载。

3,重载的规则


针对同一个类也可以是不同类:

方法名相同

方法的参数不同(参数个数或者参数类型)

方法的返回值类型不影响重载.

代码示例

class Test {

public static void main(String[] args) {

int a = 10;

int b = 20;

int ret = add(a, b);

System.out.println("ret = " + ret);

}

public static int add(int x, int y) {

return x + y;

}

public static double add(int x, int y) {

return x + y;

}

}

// 编译出错

//Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)

当两个方法的名字相同, 参数也相同, 但是返回值不同的时候, 不构成重载

三,方法递归

==========

1,递归的概念


一个方法在执行过程中调用自身, 就称为 “递归”. 递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式.

例如, 我们求 N! 起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件. 递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!

代码示例: 递归求 N 的阶乘

public static int fac(int n){

if(n==1){

return 1;

}

int tmp = n * fac(n-1);

return tmp;

}

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

int y = fac(n);

System.out.println(y);

}

2,递归执行过程分析


public static void main(String[] args) {

int n = 5;

int ret = factor(n);

System.out.println("ret = " + ret);

}

public static int factor(int n) {

System.out.println("函数开始, n = " + n);

if (n == 1) {

System.out.println(“函数结束, n = 1 ret = 1”);

return 1;

}

int ret = n * factor(n - 1);

System.out.println("函数结束, n = " + n + " ret = " + ret);

return ret;

}

3,递归练习


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

public static void print(int num) {

if (num > 9) {

print(num / 10);

}

System.out.println(num % 10);

}

代码示例2 递归求 1 + 2 + 3 + … + 10

public static int sum(int num) {

if (num == 1) {

return 1;

}

return num + sum(num - 1);

}

代码示例3 写一个递归方法,输入一个非负整数,返回组成它的数字之和. 例如,输入 1729, 则应该返回1+7+2+9, 它的和是19

public static int sum(int num) {

if (num < 10) {

return num;

}

return num % 10 + sum(num / 10);

}

代码示例4 求斐波那契数列的第 N 项

public static int fib(int n) {

if (n == 1 || n == 2) {

return 1;

}

return fib(n - 1) + fib(n - 2);

}

//循环(迭代)实现

public static int fib2(int n) {

if(n == 1 || n == 2) {

return 1;

}

int f1 = 1;

int f2 = 1;

int f3 = 0;

for (int i = 3; i <= n; i++) {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
| n == 2) {

return 1;

}

int f1 = 1;

int f2 = 1;

int f3 = 0;

for (int i = 3; i <= n; i++) {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-nKIaWurf-1715717297083)]

[外链图片转存中…(img-U0FI3MrV-1715717297084)]

[外链图片转存中…(img-HU4OkRZC-1715717297085)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值