一、定义
方法也叫代码块,用于实现功能代码的封装,方便调用。主要目的是实现代码复用。
二、方法和函数的关系
方法:(面向对象)在类中定义的成员。(成员方法)属于类创建出的对象的功能。
函数:(面向过程)
三、定义方法
权限修饰符 其他修饰符 返回值类型 方法名(参数列表){
//方法体
}
调用方法:
通过类调用: 类.方法名(参数列表);
通过对象调用:对象.方法名(参数列表);
注意事项:
1、方法允许有多参或无参
2、方法定义时的参数列表称为形式参数,调用时称为实际参数。
3、方法名称+参数列表构成了方法签名
4、方法名称使用小驼峰命名法,函数的名称一般使用下划线
5、在方法中可以使用return表示结束当前方法的执行,如果在return之后有值,则表示结束方法并返回结果。
6、如果方法没有返回值,则返回值类型应该设置为void
四、方法的重载
在同一个类中,如果出现多个方法名称相同,但是参数列表不同,这种方法称为方法重载
所谓参数列表不同指的是参数个数和参数类型不同。
方法的重载在多态特性中是一种编译时多态。
五、方法递归
特点:
1、自己调用自己
2、方法递归必须有结束条件
注意:如果方法递归层数过多可能会导致栈溢出的错误
StackOverflowError
六、方法的参数
方法的参数也属于局部变量
如果参数传递的是基础类型,则相当于传的是数据的副本(值传递)
如果参数传递的是引用类型,则传递的是引用地址(引用传递)
七、综合练习题
1、在控制台中打印9*9乘法表
2、定义一个方法,判断输入的数是否为质数,是则返回true,否则返回false。
3、哥德巴赫猜想:任何一个大于等于6的偶数都可以分解为两个质数之和。
即:输入一个大于等于6的数,在控制台打印两个质数。结果如下:
6 = 3 + 3
8 = 3 + 5
16 = 3 + 13
16 = 5 + 11
18 = 5 + 13
18 = 7 + 11
4、判断一个3位整数是否为回文数(正数和倒数值相等),例如:121是回文数,122不是回文数。
5、亲密数:如果A的所有因子之和(含1而不含本身)等于B,而且B的所有因子之和
(含1而不含本身)等于A,那么A/B称之为一对亲密数。要求:输出3000以内的所有亲密数。
6、读入一个表示年份的整数,判断这一年是否是闰年。如何判断
一个年份是否是闰年:
1. 如果这个年份能够被4 整除,且不能被100 整除,则这一年是闰年。例
如,1996 年是闰年,而相应的,1993 年就不是闰年。
2. 如果这个年份能够被100 整除,则这个数必须要能被400 整除,才是闰
年。例如,2000 年是闰年,1900 年不是闰年。
7、读入一个三位数,计算其各位数字之和。例如:123各位数字之和为6
public class Demo04PMtool {
/**+
* 求三位数相加的和
* @param number5
* @return
*/
public static int Demo04Tool(int number5) {
int sum = 0;
while (number5 > 0) {
sum += number5 % 10; // 取出最低位的数字
number5 /= 10; // 移除最低位的数字
}
return sum;
}
/**
* 亲密数
* @param
* @param
*/
public static int findPerfectNumbers(int a) {
int sum = 0;
for (int i = 1; i < a; i++) {
if (a % i == 0) {
sum += i;
}
}
return sum;
}
public static void findPerfectNum(){
for (int i = 0; i <= 3000; i++) {
if (findPerfectNumbers(findPerfectNumbers(i)) == i && findPerfectNumbers(i) < i) {
System.out.println("亲密数对:(" + i + ", " + findPerfectNumbers(i) + ")");
}
}
}
/**
*回文数
*/
public static boolean isPalindrome(int x) {
// 负数和10的倍数不是回文数
if (x < 0 || (x != 0 && x % 10 == 0)) {
return false;
}
int reversednum = 0;
while (x > reversednum) {
reversednum = reversednum * 10 + x % 10;
x /= 10;
}
return x == reversednum || x == reversednum / 10;
}
/**
* 哥德巴赫猜想
*/
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
import java.util.Scanner;
import static cn.hxzy.pro.Demo04PMtool.*;
public class Demo04PM {
public static void main(String[] args) {
Scanner num2 = new Scanner(System.in);
int num3;
do {
System.out.println("请输入要执行的序号:" + "\n" + "\t" + "1:进入系统选择" + "\n" + "\t" + "2:退出系统");
num3 = num2.nextInt();
switch (num3) {
case 2:
System.out.println("已退出");
System.exit(0);
break;
case 1:
System.out.println("jixu");
Scanner input = new Scanner(System.in);
System.out.println("请输入要查看的题目序号:");
System.out.println("\t" + "1:9*9乘法表");
System.out.println("\t" + "2:判断质数" + "\n" + "\t" + "3:哥德巴赫猜想" + "\n" + "\t" + "4:回文数" + "\n" + "\t" + "5:亲密数" + "\n" + "\t" + "6:判断闰年" + "\n" + "\t" + "7:计算和");
int num = input.nextInt();
if (num <= 0) {
System.out.println("请重新输入一个正确的题目序号!");
}
//用扫描仪接收一个数字
Scanner sc = new Scanner(System.in);
//提示用户输入一个数字
System.out.println("请输入一个整数:");
int number = sc.nextInt();
/**
* 9*9乘法表
*/
switch (num) {
case 1:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + (i * j) + "\t");
}
System.out.println();
}
break;
case 2:
/**
*判断是否为质数
*/
//假设每一个数都是质数
boolean flag = true;
//2是最小的质数
if (number <= 1) {
flag = false;
}
for (int i = 2; i < number; i++) {
//判断i是否能够被num整除
if (number % i == 0) {
//如果被num整除,那么就不是质数
flag = false;
break;
}
}
if (flag == true) {
System.out.println("true" + number + "是质数");
} else {
System.out.println("false" + number + "不是质数");
}
break;
/**
* 哥德巴赫猜想
*/
case 3:
if (number < 6 || number % 2 != 0) {
System.out.println("请输入一个大于6的偶数!");
} else {
for (int i = 2; i < number; i++) {
int b = number - i;
if (isPrime(i) && isPrime(b)) {
System.out.println(number + "=" + i + "+" + b);
}
}
}
break;
/**
* 回文数
*/
case 4:
System.out.println(isPalindrome(number));
break;
/**
* 亲密数
*/
case 5:
if (number > 3000 || number <= 0) {
System.out.println("请输入1-3000以内的整数");
} else {
for (int i = 0; i <= number; i++) {
if (findPerfectNumbers(findPerfectNumbers(i)) == i && findPerfectNumbers(i) < i) {
System.out.println("亲密数对:(" + i + ", " + findPerfectNumbers(i) + ")");
}
}
}
break;
/**
* 判断闰年
*/
case 6:
if (number % 4 == 0 && number % 100 != 0 || number % 400 == 0) {
System.out.println(number + "是闰年");
} else
System.out.println(number + "是平年");
break;
/**
* 三位数之和
*/
case 7:
if (number > 999 || number < 100) {
System.out.println("请输入一个三位数的正整数");
} else {
int sum = 0;
while (number > 0) {
sum += number % 10; // 取出最低位的数字
number /= 10; // 移除最低位的数字
}
sum = sum + number;
System.out.println("各位数字之和为:" + sum);
}
break;
default:
System.out.println("选择无效,请重新输入");
break;
}
break;
default:
System.out.println("选择无效,请重新输入");
break;
}
}while (num3!=2);
}
}