3.3 语句块
用到的不多,了解概念即可:{…} //语句块中定义的变量作用域只限于语句块
3.4 方法
类似于建立函数模型的意思
- 结构:
返回值类型(可以用void)+方法名+(形式参数1,形式参数2){
…
}
-
注意:方法板块应写在 main(…){} 外部
-
示例:写出3个数累加的方法
void add(int a,int b,int c){
int sum=a+b+c;
System.out.println(sum);}
-
调用方法的方法:通过对象调用。此处对象指的是类名。
类名 + 二狗 = new 类名;
二狗.方法名();
//即可调用! -
代码示例:
/**
* 测试方法的使用
*
* @author 王立生
*
* 题目:建立方法1:连续输出三句“东华北航”。建立方法2:求3个数的累加和。并调用这两个方法。
*
*/
public class testMethon {
public static void main(String[] args){
//调用方法:通过对象调用。对象指的是类名。
testMethon tm=new testMethon();
tm.PrintWords();
tm.add(10, 20, 50);
}
//建立方法1:连续输出三句“东华北航”
void PrintWords(){
System.out.println("东华北航");
System.out.println("东华北航");
System.out.println("东华北航");
}
//建立方法2:求3个数的累加和
void add(int a,int b,int c){
int sum=a+b+c;
System.out.println("三数之和为:"+sum);
//方法2:此处可接return sum,返回值赋予sum。所以void要改成sum变量类型:int
//return的两个作用:1.结束方法的运行 2.返回值
}
}
3.5 方法的重载
-
方法的重载:同一个名称,不同功能的独立方法
-
调用“方法”的另一种方法:
public static +类型+方法名(){
…
return 类型
}
此种调用方法更佳,因为不用创建对象,而是直接运用方法名进行调用: 方法名(…) -
代码示例:
/**
* 测试方法的重载
*
* @author 王立生
*
* 题目:构建多个同名方法,并调用。
*
*/
public class testMethonOverload {
public static void main(String[] args){
//调用各种方法
System.out.println(add(3,5)); //调用方法1
System.out.println(add(1,2,3)); //调用方法2
System.out.println(add(2,2.1)); //调用方法4
System.out.println(add(2.1,2)); //调用方法3
}
//方法1:构建add,两个整型变量相加
public static int add(int n1,int n2){ //此处public static语句,使得调用方法时更加方便
int sum=n1+n2;
return sum;
}
//方法2:构建add,三个整型变量相加
public static int add(int n1,int n2,int n3){
int sum=n1+n2+n3;
return sum;
}
//方法3:构建add,一个整型变量与一个浮点型变量相加
public static double add(int n1,double n2){
double sum=n1+n2;
return sum;
}
//方法4:构建add,一个浮点型变量与一个整型变量相加
public static double add(double n1,int n2){
double sum=n1+n2;
return sum;
}
}
3.6 递归结构
-
递归:递归的基本思想就是“自己调用自己”。
-
递归的结构:
定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。(即:return 语句,终止递归)
递归体。解答:什么时候需要调用自身方法。(即:循环结构)
3.示例:
static long factorior01(int i){
if(i==0){
return 1; //i等于1时,返回1。停止递归....此处为递归头
}
else{
return i*factorior01(i-1); //i不等于1时,返回i*(i-1)....此处为递归体
}
- 代码示例:分别以递归方法或者普通循环方法计算10的阶乘,并输出运算所用时间。
方法1:递归法:
/**
* 测试递归
*
* @author 王立生
*
* 题目:写出计算10的阶乘的程序。分别创建递归方法、一般循环结构,并调用方法输出结果
*
*/
public class testRecursion01 {
public static void main(String[] args){
long d1=System.currentTimeMillis();
System.out.println(factorior01(10));
long d2=System.currentTimeMillis();
System.out.println("时间间隔02:"+(d2-d1));
}
//方法1:递归计算10的阶乘,并输出计算所花时长
static long factorior01(int i){
if(i==0){
return 1; //i等于1时,返回1。停止递归
}
else{
return i*factorior01(i-1); //i不等于1时,返回i*(i-1)
}
}
}
方法2:一般循环法
/**
* 题目:键入参数,使用循环结构实现阶乘
*
* @author 王立生
*
*/
import java.util.Scanner;
public class testRecursion02 {
public static void main(String[] args){
Scanner sr=new Scanner(System.in);
System.out.println("输入一个整数:");
int a=sr.nextInt();
int r=1;
while(a>1){
r*=a*(a-1);
a-=2;
}
long t1=System.currentTimeMillis();
System.out.println("阶乘为:"+r);
long t2=System.currentTimeMillis();
System.out.println("计算时间为:"+(t2-t1));
}
}
- 知识补充:
计算运算所用时间:
long t1=System.currentTimeMillis();
...
long t2=System.currentTimeMillis();
System.out.println("计算时间为:"+(t2-t1));
- 运用循环时,可以想到while语句,也可以想到for语句。
- if语句用于判断。