提示:
1、方法可以用于定义可重用的代码以及组织和简化编码。
2、方法的定义由方法名称、参数、返回值类型以及方法体组成。
注意:
1、方法必须定义在主函数外部(易错)
2、 在其他某些语言中,方法称为过程(procedure) 或函数(fimction)。带返回值的方 法称为函数,返回值类型为 void的方法称为过程。
3、我们经常会说 “定义方法” 和 “声明变量”,两者的细微差别:定义 是指被定义的条目是什么,而声明通常是指为被声明的条目分配内存来存储数据。
4、void 方法不需要 return 语句,但它能用于终止方法并返回到方法的调用者。它的语法是:
return;
这种用法很少,但是对于改变 void 方法中的正常流程控制是很有用的。
例如:当分数是 无效值时,下列代码就用 return 语句结束方法。
public static void printCrade(double score){
if (score < 0| |score > 100){
System.out.println("Invalid score");
return;
}
if (score >=90.0){
System.out.println('A');
}
else if (score >= 80.0){
System.out.println('B');
}
else if (score >= 70.0){
System.out.println('C');
} else if (score >= 60.0){
System.out.println(' D ' ) ;
} else {
System.out.print1n('F');
}
}
瞥告:在方法头中,需要对每一个参数进行独立的数据类型声明。例如:max(int numl,1nt num2)是正确的,而 max(int numl,mim2)是错误的。
调用方法
提示:方法的调用是执行方法中的代码
瞥告:对带返回值的方法而言,return 语句是必需的。下面图 a 中显示的方法在逻辑上是 正确的,但它会有编译错误,因为 Java 编译器认为该方法有可能不会返回任何值。
注意:
1、方法能够带来代码的共享和重用。除了可以在 当前类中调用 max 方法,还可以在其他类中调用它。如果创建了一个新类,可以通过使用 “类名 .方法名”(如: TestMax.max) 来调用 max 方法。
2、每当调用一个方法时,系统会创建一个活动记录(也称为活动框架),用于保存方法中 的参数和变量。活动记录置于一个内存区域中,称为调用堆栈(call stack)。调用堆栈也称为执行堆栈、运行时堆栈,或者一个机器堆栈,常简称为 “堆栈”。
3、void 方法不需要 return 语句,但它能用于终止方法并返回到方法的调用者。
它的语法是:return;
6.1通过传值进行参数传递
提示:调用方法的时候是通过传值的方式将实参传给形参的。
如果实参是变量而不是直接量,则将该变童的值传递给形参。无论形参在方法中是 否改变,该变量都不受影响。图中第5行调用了increment方法,让n自增1,但是x的实际值还是没有变 注意:为了简便,Java 程序员经常说将实参 x 传给形参 y, 实际含义是指将 x 的值传递给 y。
传递给方法的实际参数应该与方法签名中的形式参数具有相同的数目、类型和顺序。
6.2 模块化代码
模块化使得代码易于维护和调试,并且使得代码可以被重用。 使用方法可以减少冗余的代码,提高代码的复用性。方法也可以用来模块化代码,以提 高程序的质量。
将一个大问题分成两个子问题 :确定一个数字是否是素数以及打印素数。这样,新的 程序会更易读,也更易于调试。而且,其他程序也可以重用方法 printPrimeNumbers 和 isPrime
6.3 重载方法
提示:
1、重栽方法使得你可以使用同样的名字来定义不同方法,只要它们的签名是不同的
2、重栽方法可以使得程序更加清楚,以及更加具有可读性。执行同样功能但是具有不同参数类型的方法应该使用同样的名字。
注意:
1、被重栽的方法必须具有不同的参数列表。不能基于不同修饰符或返田值类型来重栽方法。
2、有时调用一个方法时,会有两个或更多可能的匹配,但是,编译器无法判断哪个是 最精肩的匹配。这称为歧义调用(ambiguous invocation)。歧义调用会产生一个编译错误。
注意:
调用 max(3,4)时不会使用 max(double.double),因为, max(double,double)和 max(int,int)与 max(3,4)都是可能的匹配。调用方法时,Java 编译 器寻找最精确匹配的方法。因为方法 maX(int,int)比 max(double,double)更精确,所以调 用 max(3,4)时使用的是 max(int,int)
6.4 生成随机字符
生成任意两个字符 ch1和 ch2之间的随机字符,其中 ch1<ch2, 如下所示:
(char) (ch1 + Math.random( ) *(ch2 - ch1 + 1) )
如:生成a~z之间小写字母是:
(char) ('a' + Math.random( ) *( 'z'- 'a' + 1)
编程题:
1、 (检测密码)一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。 假定密码规则如下:
密码必须至少 8 位字符。
密码仅能包含字母和数字。
密码必须包含至少两个数字。
编写一个程序,提示用户输入一个密码,如果符合规则,则显示 Valid Password, 否则 显示 Invalid Password
import java.util.Scanner;
public class Class27 {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入密码:");
String usr = scanner.nextLine();
if (isOK(usr)) {
System.out.println("合法");
} else {
System.out.println("不合法");
}
}
//判断是否满足3个条件
public static boolean isOK(String usr) {
return isRight1(usr) && isRight2(usr) && isRight3(usr);
}
//判断是否满足条件1
public static boolean isRight1(String usr) {
return usr.length() >= 8;
}
//判断是否满足条件2(包含判断是否是数字、字母)
public static boolean isRight2(String usr) {
for (int i = 0; i < usr.length(); i++) {
char c = usr.charAt(i);
if (!isDight(c) && !isLetter(c)){
return false;
}
}
return true;
}
//判断是否满足条件3
public static boolean isRight3(String usr) {
int count = 0;
for (int i = 0; i < usr.length(); i++) {
char c = usr.charAt(i);
if (isDight(c)) {
count++;
}
}
return count >= 2;
}
//判断是否是数字
public static boolean isDight(char c) {
return c >= '0' && c <= '9';
}
//判断是否是字母
public static boolean isLetter(char c) {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
}
2、(数学:平方根的近似求法)有几种实现 Math 类中 sqrt方法的技术。其中一个称为巴比伦法。 它通过使用下面公式的反复计算近似地得到:
nextCuess =(lastCuess + n / lastCuess) / 2
当 nextGuess 和lastGuess几乎相同时,nextGuess就是平方根的近似值。最初的猜 测值可以是任意一个正值(例如1)。这个值就是lastCuess的初始值。如果 nextGUess 和 lastGuess的差小于一个很小的数,比如 0.0001, 就可以认为 nextGuess是 n的平方根的近 似值;否则,nextGuess就成为 lastGuess, 近似过程继续执行。实现下面的方法,返回 n的平方根。
public static double sqrt(long n)
class Class28{
public static void main(String[] args){
System.out.println(sqrt(9));
System.out.println(sqrt(64));
}
public static double sqrt(int n){
//n=9
double lastGuess=1;
double nextGuess=0;
while(true){
nextGuess=(lastGuess+n/lastGuess)/2;
if(Math.abs(nextGuess-lastGuess)<0.0001){
break;
}
lastGuess=nextGuess;
}
return nextGuess;
}
}
3、( 回文整数)使用下面的方法头编写两个方法:
// Return the reversal of an integer, i.e., reverse(456) returns 654
public static int reverse(int number)
// Return true if number is a palindrome
public static boolean isPalindrome(int number) 使用 reverse 方法实现 isPalindrome。如果一个数字的反向倒置数和它的顺向数一样,这 个数就称作回文数。编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数
import java.util.Scanner;
class Class26{
public static void main(String[] args){
//1.获取用户输入
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int number=scanner.nextInt();
//2.判断该数字是否是回文
if(isPalindrome(number)){ //调用isPalindrome方法
System.out.println("是回文");
}else{
System.out.println("不是回文");
}
}
public static boolean isPalindrome(int n){
return reverse(n)==n; //调用reverse方法
}
//实现将数字反转
public static int reverse(int n){
int res=0;
while(true){
res=res*10+n%10;
n/=10;
if(n==0){
break;
}
}
return res;
}
}