1、,方法(函数),本章要点,方法的概念方法方法的定义与调用方法方法的递归调用 变量的作用域,主要内容,概述方法的定义、返值和调用,方法间的参数传递,嵌套与递归调用Java 命令行参数等内容。,1概述,class 类的定义,定义类变量,方法,1概述,主类的定义,类变量,static,public static void main(String args) printstar(); print_message(); printstar(); ,例1先举一个方法调用的简单例子,public static void printstar() System.out.printfln(* * * * * *
2、* * * * * * *); void print_message() System.out.printfln(How do you do!); ,运行情况如下:* * * * * * * * * How do you do!* * * * * * * * *,2 方法的定义和调用,public static int max(int x,int y) int z; z=xy? x:y; return(z); ,public static void main(String args)int a=6,b=10; System.out.printfln( max=+max(a,b); ,例2_1定
3、义方法求两数最大值,实参,形参,返回值,public static int max(int x,int y) return xy?x:y; ,public static void main(String args)int a=6,b=10; System.out.printfln( max=+max(a,b); ,例2_2定义方法求两数最大值,public static int max(int x,int y) if(xy) return x; else return y; ,public static void main(String args)int a=6,b=10; System.ou
4、t.printfln( max=+max(a,b); ,例2_3 定义方法求两数最大值,public static int max(int x,int y) if(xy) return x; else return y; ,public static void main(String args) int a=6,b=10,c=3,m; m=max(a,b); m=max(m,b); System.out.printfln( max=+m); ,例2_4 利用方法求三数中的最大值,public static int max(int x,int y) if(xy) return x; else r
5、eturn y; ,public static void main(String args) int a=6,b=10,c=3; System.out.printfln(max=+max(max(a,b),c); ,例2_5 利用方法求三数中的最大值,方法调用的方式,1方法语句 printstar(); 2方法表达式 c=2*max(a,b);方法参数 m = max (a , max ( b , c ) ) ;,练习1 利用方法求两个正整数的最大公约数。,public static void main(String args) int a=24,b=9; System.out.println
6、(gcd(a,b); static int gcd(int a,int b) int k;do k=a%b; a=b; b=k; while(k!=0);return a; ,练习2 利用方法判断某个数是否为素数。,public static void main(String args) int a=19; if(prime(i) System.out.println( i+ 是素数 ); else System.out.println( i+不是素数 ); static boolean prime(int x ) int k; for(int i=2; i=Math.sqrt(x); i+)
7、 if(x%i=0) return false; return true;,练习3 利用方法输出1到100中的素数。,public static void main(String args) int a=19; for(int i=2;i=100;i+) if(prime(i) System.out.println( i ); static boolean prime(int x ) for(int i=2; i=Math.sqrt(x); i+) if(x%i=0) return false; return true;,方法的嵌套调用,例3 编程实现判断数组中元素奇偶性的方法。public
8、static void main(String args) int a=2,6,1,8,-3,9,-5,4,0,-7; for(int i=0;iy) t=x; x=y; y=t; System.out.println( x=+x+ y=+y); ,public static void main(String args)int a=10,b=6; change(a,b); System.out.println( a=+a+ b=+b); ,例4_1数值交换,public static void change(int x) int t; if(x0x1) t=x0; x0=x1; x1=t; S
9、ystem.out.println(x0=+x0+,x1=+x1); ,public static void main(String args)int a=10,6; change(a); System.out.println( a0=+a0+,a1=+a1); ,例4_2数值交换,练习5:定义方法返回数组的最大值。练习6_1:排序方法的定义和调用(起泡法)。练习6_2:排序方法的定义和调用(简单选择)。练习7:定义方法将一方阵元素行列互换。练习8:定义方法实现字符串逆序。,练习5:定义方法返回数组的最大值。,public static void main(String args) int i
10、; int a=7,15,23,71,81; i=max(a); System.out.print(a+i+=+ai); static int max(int a) int i,m=0; for( i=1;i am) m=i; System.out.print(a+m+=+am); return m; ,练习6_1:排序方法的定义和调用。,/起泡法public static void main(String args) int a=76,50,93,7,81,55,8,20; sort(a); for(int x:a) System.out.print(x+ ); static void so
11、rt(int a) boolean b=true; int i,j,t; for( i=0;i aj+1) t = aj; aj = aj+1; aj+1 = t; b=true; for(int x:a) System.out.print(x+ ); ,练习6_2:排序方法的定义和调用。,/简单选择public static void main(String args) int i,j,t,min; int a=76,50,93,7,81,55,8,20; sort(a); for(i=0;ia.length;i+) System.out.println(ai+t);static void
12、sort(int a) int i,j,t,min; for(i=0;ia.length-1;i+) min=i; for(j=i+1;ja.length;j+) if (ajamin) min=j; if (i!=min) t=ai; ai=amin;amin=t; ,练习7:定义方法将一方阵元素行列互换。,public static void main(String args) int i,j; int a=7,5,3,4,8,1,5,2,2,0,3,9,4,1,6,3; reverse(a) ; for(i=0;ia.length-1;i+) for(j=0;jai.length;j+)
13、 System.out.print(aij+t);System.out.println(); static void reverse( int a) int i,j,t; for(i=0;ia.length;i+) for(j=0;ji;j+) t=aij; aij=aji; aji=t; ,练习8:定义方法实现字符串逆序。,public static void main(String args) String s1; Scanner r=new Scanner(System.in); System.out.print(输入字符串:); s1=r.nextLine(); s1=reverse(
14、s1); System.out.print(Newstring:+s1); static String reverse(String s1) char c; String s2=; for(int i=0; is1.length(); i+) c=s1.charAt(i); s2=c+s2; return s2; ,求!非递归方法: int f(int n) int s=1; for(int i=1;i=0) System.out.print(n+!=+fac (n); ,static int fac (int n) int f; if(n=0 | n=1) return 1; else re
15、turn n*fac(n-1); ,注意溢出,例5 用递归方法求!。,fac(5),main,return 5*fac(4),fac(n=5),return 4*fac(3),fac(n=4),return 2*fac(1),fac(n=2),return 3*fac(2),fac(n=3),return 1,fac(n=1),1,2,6,24,120,120,输出,public static void main(String args) int n=5; if(n=0) System.out.print(n+!=+fac (n); ,static int fac (int n) int f;
16、 if(n=0 | n=1) f= 1; else f=n*fac(n-1); System.out.print(n+!=+f); return f; ,注意溢出,例5 用递归方法求!。,31,练习9 计算Fibonacci序列第i项的值。,Fibonacci序列的通项公式为:,f1=1f2=1fn=fn-1+fn-2, (n=3),1 1 2 3 5 8 13 21 34 ,32,练习9 计算Fibonacci序列第i项的值。,Fibonacci序列的通项公式为:,f1=1f2=1fn=fn-1+fn-2, (n=3),1 1 2 3 5 8 13 21 34 ,public static
17、void main(String args) int n=8; if(n0) System.out.print(n+:+f(n); static int f(int n) if(n=1 | n=2) return 1; else return f(n-1)+f(n-2); ,5 变量与方法的作用范围,public class circle final static double pi=3.1415926;public static void main(String args) double r=1.2,h=2.3; if(r=0.01) System.out.println(area=+area(r); System.out.println(perimeter=+perimeter(r); System.out.println(perimeter=+volume(r,h); static double area(double r) return pi*r*r; static double perimeter(double r) return 2*pi*r; static double volume(double r,double h) return area(r)*h; ,