java day009 方法中的返回值与局部变量
1.有返回值无参数
示例
/* 方法无形参有返回值示例 */
import java.util.Scanner;
class GetWeapon {
public static void main(String[] args) {
int weapon = getWeapon();
switch (weapon) {
case 1:
System.out.println("长剑+1");
break;
case 2:
System.out.println("匕首+1");
break;
case 3:
System.out.println("法杖+1");
break;
default:
System.out.println("你还想全都要??");
}
}
/**
* 方法功能 :获取武器
*
* @return 返回所获取武器的类型
*/
public static int getWeapon() {
int weapon = 0;
Scanner input = new Scanner(System.in);
System.out.println("勇者,请选择您的武器:");
System.out.println("1:长剑(ATN +5) 2:匕首(ATN +2) 3:法杖(INT +10)");
System.out.println("-------------------------");
weapon = input.nextInt();
return weapon;
}
}
/*
输出结果:
D:\MyJavaCode\java day009 返回值>javac GetWeapon.java
D:\MyJavaCode\java day009 返回值>java GetWeapon
勇者,请选择您的武器:
1:长剑(ATN +5) 2:匕首(ATN +2) 3:法杖(INT +10)
-------------------------
1
长剑+1
*/
流程分析:从主函数main开始,定义了一个整型变量weapon,并调用getWeapon()方法,将方法所返回的值,赋值给了变量weapon,然后通过switch语句判断weapon的类型。
2.有形参有返回值
示例
/* 方法有形参有返回值示例 */
import java.util.Scanner;
class AttackMonster {
public static void main(String[] args) {
int monsterhp = 100;
int weapon = 0;
int actnum = 0;
Scanner input = new Scanner(System.in);
System.out.println("怪物HP:" + monsterhp);
System.out.println();
System.out.println("请选择攻击的武器:");
System.out.println("1:长剑(ATN +5) 2:匕首(ATN +2) 3:法杖(INT +10)");
weapon = input.nextInt();
System.out.println("请选择攻击的次数:");
actnum = input.nextInt();
monsterhp = showAttack(weapon, actnum);
System.out.println();
System.out.println("怪物HP:" + monsterhp);
}
/**
* 方法功能:展示攻击怪物效果,并返回怪物被攻击后剩余血量。
*
* @param weapon 选择攻击的武器
* @param num 选择攻击次数
* @return 返回剩余血量
*/
public static int showAttack(int weapon, int num) {
int monsterhp = 100;
if (1 == weapon) {
for (int i = 1; i <= num; i++) {
System.out.println("用长剑攻击了" + i + "次");
System.out.println("怪物-5hp");
monsterhp -= 5;
}
}
if (2 == weapon) {
for (int i = 1; i <= num; i++) {
System.out.println("用匕首攻击了" + i + "次");
System.out.println("怪物-2hp");
monsterhp -= 2;
}
}
if (3 == weapon) {
for (int i = 1; i <= num; i++) {
System.out.println("用法杖攻击了" + i + "次");
System.out.println("怪物-10hp");
monsterhp -= 10;
}
}
return monsterhp;
}
}
/*
输出结果:
D:\MyJavaCode\java day009 返回值>java AttackMonster
怪物HP:100
请选择攻击的武器:
1:长剑(ATN +5) 2:匕首(ATN +2) 3:法杖(INT +10)
1
请选择攻击的次数:
7
用长剑攻击了1次
怪物-5hp
用长剑攻击了2次
怪物-5hp
用长剑攻击了3次
怪物-5hp
用长剑攻击了4次
怪物-5hp
用长剑攻击了5次
怪物-5hp
用长剑攻击了6次
怪物-5hp
用长剑攻击了7次
怪物-5hp
怪物HP:65
*/
流程如上,只不过这次是将两个实参传递给了方法。
注意:
若方法有形参,调用方法的时候必须有相同数据类型的实参,数据类型得一致,实参个数与顺序也得与形参个数顺序保持一致!!!
返回值类型必须与声明类型一致!!!
局部变量
概念:
除class大括号以外的,其他大括号以内的变量都可以认为是一个局部变量。
方法大括号以内,流程控制语句大括号以内都是局部变量。
作用域:
只作用于当前大括号以内。
范围域:
与作用域相同。
示例
/* 局部变量示例 */
class LocalVariable {
public static void main(String[] args) {
int num = 5;
show(num);
System.out.println(num);
}
public static void show(int num) {
num = 10;
}
}
/*
输出结果:
D:\MyJavaCode\java day009 返回值与局部变量>javac LocalVariable.java
D:\MyJavaCode\java day009 返回值与局部变量>java LocalVariable
5
*/
结论:main方法中的num变量和show方法中的num是两个不同的变量。局部变量的作用域与作用范围只在对应的大括号内。