六、Java方法 (2)

方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。

命令行传参(理解一下概念就好)

有时候你希望运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

args.length:表示这个数组的长度

package com.xiaodi.operator.method; public class Demo03 { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "]:" + args[i]); } } }

我们去编译它:

​ 到对应文件的目录下(D:\代码\JavaSE\基础语法\src\com\xiaodi\operator\method>javac Demo03.java)

运行:

​ 因为有package com.xiaodi.operator.method;的缘故所以我们要退到com的上一级目录(src)才能运行否则会报错。

​ D:\代码\JavaSE\基础语法\src>java com.xiaodi.operator.method.Demo03 this is xiaodi

返回:

​ args[0]:this
​ args[1]:is
​ args[2]:xiaodi

可变参数

JDK1.5开始,java支持传递同类型的可变参数给一个方法。

在方法声明中,在指定参数类型后加一个省略号(...)。

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通参数必须在它之前声明。传递的参数必须是一个类型的

它的本质就是我们下一章要讲的数组

理解一下 下面的代码:

package com.xiaodi.operator.method; public class Demo04 { public static void main(String[] args) { text(7, 8, 1, 9, 75); } public static void text(int... i) { System.out.println(i[0]); System.out.println(i[1]); System.out.println(i[2]); System.out.println(i[3]); System.out.println(i[4]); } }

i[0]就是数组的第0个值,也就是第1个,java是从0开始计算的。

示例(输出最大的参数):

package com.xiaodi.operator.method; public class Demo05 { public static void main(String[] args) { //调用可变参数的方法 printMax(23, 47, 12, 82, 45, 2); //传递一组数组 printMax(new double[]{1, 2, 3}); } public static void printMax(double... numbers) { if (numbers.length == 0) { System.out.println("没有输入参数!"); return; } double result = numbers[0]; //排序 for (int i = 1; i < numbers.length; i++) { if (numbers[i] > result) { result = numbers[i]; } } System.out.println("Max value:" + result); } }

输出:

Max value:82.0
Max value:3.0

递归(经常出现在面试的笔试里)

A方法调用B方法,我们很容易理解!

递归就是:A方法调用A方法,就是自己调用自己

利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包含两个部分:

递归头:什么时候不调用自身的方法。如果没有头,将陷入死循环。

递归体:什么时候需要调用自身的方法。

有上过大学的肯定知道阶乘这个东西

阶乘就是:

​ 2! 2x1

​ 3! 3x2x1

​ 5! 5x4x3x2x1

我们使用代码递归的方法实现一下:

package com.xiaodi.operator.method; public class Demo06 { public static void main(String[] args) { System.out.println(f(2)); } public static int f(int n) { if (n==1) { return 1; }else { return n*f(n-1); } } }

如上代码:

调用f方法求2的阶乘,2不等于1所以走else这条分支,返回 n乘于调用自己本身方法减去当前求的阶乘减去1

现在已知的是n乘为2乘;f(n-1)为f(2-1)为f(1)

f(1)走if这条分支,返回 1

所以因为f(n-1)为1

所以2的阶乘为 2*1为1

能不用递归,就不用递归;因为如果遇到基数比较大的时候,非常耗费资源

本章作业:写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。

思路推荐:

写4个方法:加减乘除

利用循环+switch进行用户交互

传递需要操作的两个数

输出结果

我相信只要用心去写大家都能写出来的!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggddf.html