方法:
Java语言中为什么要引入方法?方法本质是什么?
方法本质就是一段代码,这个代码片段可以完成某个特定功能,并且可以被重复利用。
例:
public class MethodTest01{
public static void main(String[] args){
//需求:计算50和30的求和
MethodTest01.sum(10,20);
MethodTest01.sum(20,30);
}
//定义一个方法,该方法完成两个int类型数据的求和。
//Method
public static void sum(int e,int f){
int c = e + f;
System.out.println(e + "+" + f + "=" + c);
}
}
方法如何定义,语法:
[修饰符列表] 返回值类型 方法名(形式参数列表)
{
方法体;//由java语句构成
}
1.返回值类型可以是java中任何一种数据类型。
2.如果该方法执行结束之后没有任何返回值,那么返回值类型必须写void
3.如果方法的返回值类型不是void,而是其他的数据类型,那么在方法体中必须保证有“return 值;”语句返回值。
4.注意:如果return语句一旦执行,则标识该方法结束。所以return语句下面不能再编写其他的java语句。
5.方法名只要是合法的标识符即可。
6.方法的形式参数列表参数的个数可以是0个,也可以是1个,可以是多个,如果是多个的话,必须使用“,”隔开。
7.方法的形式参数列表中起决定性作用的是参数的类型,而不是变量名。
8.所有带有static关键字的方法调用的时候应该采用“类名.方法名(实际参数列表);”
例:
public class MethodTest02{
public static void main(String[] args){
//10,20这是实际参数列表(实参)
//即使这个方法执行结束之后有返回值,我可以采用放弃接收。
// MethodTest02.sumInt(100,23);
System.out.println(MethodTest02.sumInt(100,23));
//不过一般情况下,只要方法有返回值就应该接收。
int retValue = MethodTest02.sumInt(100,23);
System.out.println(retValue);
}
public static int sumInt(int a,int b){ //int a,int b 叫做形式参数列表(形参)
return a + b;
}
}
练习题:
/*
【程序1】
打印出100-999中所有的"水仙花数",所谓"水仙花数"是指一
个三位数,其各位数字立方和等于该数本身。例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方
+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解
出个位,十位,百位。
*/
public class ShuiXianHua {
public static void main(String[] args) {
for(int i = 100;i<1000;i++){
if(isNarcissus(i)){
System.out.println(i + " 是水仙花数!");
}
}
}
public static boolean isNarcissus(int num){
int baiWei = num/100; //百位数值
int shiWei = num/10%10; // 十位数值
int geWei = num%100%10; // 个位数值
if(num == liFang(baiWei) + liFang(shiWei) + liFang(geWei) ){
return true;
}else{
return false;
}
}
public static int liFang(int num){
return num * num * num;
}
}
/*
【程序1】
某电信公司的市内通话费计算标准如下:三分钟内0.2元,
三分钟后每增加一分钟增加0.1元,不足一分钟的按一分
钟计算。要求编写程序,给定一个通话时间(单位:秒)
计算出应收费金额。
*/
public class DianHuaFei{
public static void main(String args[]){
int time = 5000;// 通话时间,单位是秒
double money = jiSuanHuaFei(time);
System.out.println("通话时间是:" + time + "秒,通话费用是:" + money + "元.");
}
/**
* 计算指定时间所需要的花费
* @param time 通话的时间
* @return 通话的费用
*/
public static double jiSuanHuaFei(int time){
double money = 0.0;
// 判断通话时间是否在3分钟之内
// 3分钟之内,话费 是0.2元
if(time <= 180){
money = 0.2;
}
// 3分钟之外
else{
// 判断通话时间是否是正分整秒
// 非正分正秒,不足一分钟的按一分
money = (time-180)/60 *0.1 +0.2;
if(time % 60 != 0){
money += 0.1;
}
}
return money;
}
}
/*
程序2】
某市的出租车计费标准为:3公里以内10元,3公里以后每
加0.5公里加收1元;每等待2.5分钟加收1元;超过15公里
的加收原价的50%为空驶费。
要求编写程序,对于任意给定的里程数(单位:公里)和
等待时间(单位:秒)计算出应付车费
*/
public class CheFei {
public static void main(String[] args) {
// 声明变量名称的规范:第一个单词的首字符小写,其余单词的首字符大写
// 等待时间,单位秒
int waitTime = 200;
// 行驶里程,单位:公里
double liCheng = 16.6;
double money = jiSuanCheFei(waitTime,liCheng);
System.out.println("行驶里程是:" +liCheng + "公里,等待时间是:" + waitTime + "秒,应付的车费是:" + money + "元." );
}
/**
* 计算等待时间和行驶里程所需要的车费
* @param liCheng 行驶里程,单位是公里
* @param waitTime 等待时间 单位是秒
* @return 应付的车费
*/
public static double jiSuanCheFei(int waitTime,double liCheng){
// 计算等待时间的费用
double timeMoney = jiSuanTimeMoney(waitTime);
//------------------------------------------
// 计算行驶里程的费用
// 判断里程是否在3公里之内
double liChengMoney = 0.0;
if(liCheng <= 3.0){
liChengMoney = 10.0;
}
// 3公里了之外
else{
// 判断里程是否在15公里之内
liChengMoney = (int)((liCheng -3.0)/0.5) * 1 + 10.0;
if(liCheng > 15.0){
liChengMoney *= 1.5;
}
}
// 总的车费是时间的费用 + 里程的费用
double money = timeMoney + liChengMoney;
return money;
}
/**
* 计算等待时间所需要的车费
* @param waitTime 等待时间 单位是秒
* @return 应付的车费
*/
public static double jiSuanTimeMoney(int waitTime){
// 计算等待时间的费用
double timeMoney = (waitTime/150)*1;
return timeMoney;
}
}