Java方法
1. 什么是方法?
Java方法是语句的集合,它们在一起执行一个功能。
类似于其他语言的函数。
- 方法是解决一类问题的步骤的有序组合。
- 方法包含于类或对象中。
- 方法在程序中被创建,在其他地方被引用。
2. 方法的定义
方法包括一个方法头和一个方法体。下面是一个方法的所有部分:
修饰符 返回值类型 方法名(参数类型 参数名) {
……
方法体
……
return 返回值;
}
- 修饰符(可选): 告诉编译器如何调用该方法,定义了该方法的访问类型。
- 返回值类型:方法可能会返回值,无返回值的情况用void。
- 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。在Java中,方法名可以和变量名相同!
- 参数类型(可选):参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。
- 形参:在方法调用时用于接收外界输入的数据。
- 实参:调用方法时实际传给方法的数据。
- 方法体:方法体包含具体的语句,定义该方法的功能。
3. 方法的重载
如果两个方法的方法名相同而参数不同,这种情况叫做方法的重载。
注意:
- 不能存在两个方法名和参数完全相同的方法!
- 在调用重载的方法时,会根据你传入的实参类型来确定调用哪个方法。
- 方法的返回类型可以相同可以不同,但仅仅返回类型不同不足以成为方法的重载。
4、可变参数
JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。
- 在方法声明中,在指定参数类型后加一个省略号(…)。
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数都必须在它之前声明。
- 相当于一个可变长度的数组。
- 可以直接传入一个数组。
例如:
public class Main {
public static void main(String[] args) {
function(5, 1, 2, 3, 4, 5);
}
public static void function(int n, int... a) {
for (int i = 0; i < n; i++) {
System.out.println(a[i]);
}
}
}
运行结果为:
5.递归
略。
练习
汉诺塔问题
题目描述
汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上, 大的在下面,小的在上面,形成了一个塔状的锥形体。
现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:
(1)每次只能移动一个圆盘;
(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
请输出每次移动的方法并在最后输出总共所需移动的次数。
示例
输入:
3
输出:
第1步将1号盘子从A移动到C
第2步将2号盘子从A移动到B
第3步将1号盘子从C移动到B
第4步将3号盘子从A移动到C
第5步将1号盘子从B移动到A
第6步将2号盘子从B移动到C
第7步将1号盘子从A移动到C
所需要移动的次数为:7
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
hanoi(n, 'A', 'B', 'C');
System.out.println("所需要移动的次数为:" + ans);
scanner.close();
}
public static int ans = 0;//ans为移动的次数
public static void hanoi(int n, char A, char B, char C) {// 将n个盘子从A柱借助B柱移动到C柱
if (n == 0) return;//终止条件
hanoi(n - 1, A, C, B);//先假设将n-1个盘子从A柱借助C柱移动到B柱
ans++;//将A柱的第n个盘子从A柱移动到C柱,移动的次数加一
System.out.println("第" + ans + "步将" + n + "号盘子从" + A + "移动到" + C);
hanoi(n - 1, B, A, C);//再将B柱的n-1个盘子借助A柱移动到C柱
}
}