方法:
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; } }