java重载方法math_Java语言程序设计(十二)Math数学类,方法重载及变量作用域...
1.重載方法
上一篇文章用到的max方法只能用于int型數(shù)據(jù)類型,但是如果需要決定兩個浮點數(shù)中哪個較大,解決方法是創(chuàng)建另一個方法名相同但參數(shù)不同的方法,代碼如下:
public static double max(double num1, double num2){
if(num1>num2)
return num1;
else
return num2;
}
如果調(diào)用帶int型參數(shù)的max方法,就將調(diào)用需要int型的max方法,如果需要double型參數(shù)的max方法,就將調(diào)用需要double型參數(shù)的max方法,這稱為方法重載,在一個類中有兩個方法,它們具有相同的名字,但有不同的參數(shù)列表,Java編譯器根據(jù)方法簽名決定使用哪個方法。
下面我們用一個例子來說明,我們想寫一個程序,程序中創(chuàng)建三個方法,第一個方法為求最大整數(shù),第二個方法為求最大雙精度數(shù),第三個方法求三個雙精度數(shù)中的最大值,這三個方法都被命名為max,程序清單如下:
package testmax;
/**
*
* @author john
*/
public class TestMax {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
System.out.println("The maxium between 3 and 4 is"+max(3,4));
System.out.println("The maxium between 3.0 and 5.4 is"+max(3.0,5.4));
System.out.println("The maxium between 3.0 , 5.4 and 10.14 is"+max(3.0,5.4,10.14));
}
public static int max(int num1,int num2){
if(num1>num2)
return num1;
else
return num2;
}
public static double max(double num1,double num2){
if(num1>num2)
return num1;
else
return num2;
}
public static double max(double num1,double num2,double num3){
return max(max(num1,num2),num3);
}
}
當(dāng)調(diào)用max(3,4)時,調(diào)用的是兩個整數(shù)中較大值的max方法,當(dāng)調(diào)用max(3.0,4.5)時,調(diào)用的是求兩個雙精度數(shù)中較大值的max方法。當(dāng)調(diào)用max(3.0,5.4,10.14)時,調(diào)用的是求三個雙精度數(shù)中最大值的max方法。
我們同樣也可以調(diào)用像max(3,2.5)這樣帶一個int值和一個double值得max方法,那就是調(diào)用求兩個double數(shù)中較大值的方法,實參值2自動轉(zhuǎn)換為double值,然后傳遞給這個方法。
我們可能都會有一些疑惑,那就是為什么調(diào)用max(3,4)時不會使用max(double,double)呢,其實max(double,double)和max(int,int)都是可能的匹配,在調(diào)用方法時,Java編譯器尋找最精確匹配的方法,因為int更為精確,所以調(diào)用的是max(int,int),如果兩個方法誰也不比誰精確,就會出現(xiàn)歧義,導(dǎo)致編譯錯誤。
2.變量的作用域
變量的作用域是指變量可以在程序中引用的范圍,在方法中定義的變量稱為局部變量。局部變量的作用域從聲明變量的地方開始,直到包含該變量的塊結(jié)束為止。局部變量都必須在使用之前進(jìn)行聲明和賦值,下面舉一個例子:
public static void method(){
int x=1;
int y=1;
for(int i=1;i<10;i++){
x=x+i;
}
for(int i=1;i<10;i++){
y=y+i;
}
}
由這個例子我們可以看到,我們可以在一個方法的不同塊里聲明同名的局部變量,但是不能在嵌套塊中或同一塊中兩次聲明一個局部變量。下面這種就是錯誤的編程寫法
public static void method2(){
int x=1;
int sum=0;
for(int x=1;x<10;x++){
sum=sum+x;
}
我們再舉一個錯誤的例子:
for(int i=0;i<10;i++){
}
System.out.println("i");
這個程序的錯誤在于,我們不要在塊內(nèi)聲明變量,然后企圖在塊外使用它,因為i沒有在for循環(huán)之外定義,所以最后一條語句就會產(chǎn)生一個語法錯誤。
3.Math數(shù)學(xué)類
Math類包含完成基本數(shù)學(xué)函數(shù)所需的方法,我們在之前的學(xué)習(xí)中已經(jīng)
使用過方法pow(a,b),也使用過方法Math.random,我們這次會介紹Math類中其他的方法,這些方法分為三類:三角函數(shù)方法,指數(shù)函數(shù)方法和服務(wù)方法,除了這些方法之外,Math類還提供了兩個很有用的double型常量,PI和E(自然對數(shù)的底),可以在任意程序中用Math.PI和Math.E的形式來使用這兩個常量。
(1)三角函數(shù)方法
Math類包含下面的三角函數(shù)方法:
public static double sin(double radians)
public static double cos(double radians)
public static double tan(double radians)
public static double toRadians(double degree)
public static double toDegrees(double radians)
public static double asin(double a)
public static double acos(double a)
public static double atan(double radians)
sin,cos,tan的參數(shù)都是以弧度為單位的角,asin,acos,atan的返回值是在-Π/2到Π/2之間的一個弧度值。
例如:
Math.toDegrees(Math.PI/2) returns 90.0
Math.toRadians(30) returns Π/6
Math.sin(0) returns 0.0
Math.sin(Math.toRadians(270)) returns -1.0
Math.sin(Math.PI/6) returns 0.5
Math.sin(Math.PI/2) returns 1.0
Math.cos(0) returns 1.0
Math.asin(0.5) returns Π/6
(2)指數(shù)函數(shù)方法
Math類中有五個與指數(shù)函數(shù)有關(guān)的方法:
public static double exp(double x) ? 返回e的x次冪
public static double log(double x)? 返回ln(x)
public static double log10(double x)? 返回log10(x)
public static double pow(double a,double b)? 返回a的b次冪
public static double sqrt(double x)? 返回根號x
3.min max和abs方法
重載min和max方法返回兩個數(shù)的最小值和最大值,重載abs返回一個數(shù)的絕對值。Math.abs(-2) returns 2
4.random方法
我們已經(jīng)使用過random方法,生成大于等于0.0小于1.0的double型隨機數(shù),我們可以用它編寫簡單的表達(dá)式,生成任意范圍的隨機數(shù)。
int (Math.random()*10)? 返回0到9之間的隨機數(shù)。
50+ (int)(Math.random()*10)? 返回50到59之間的隨機數(shù)。
a + (int)(Math.random()*b) ? 返回一個a到a+b之間但不包括a+b的隨機數(shù)
5.取整方法
public static double ceil(double x)? 返回比這個數(shù)大的最近的整數(shù)
public static double floor(double x)? 返回比這個小的最近的整數(shù)
public static double rint(double x) ?返回其值最接近參數(shù)并且是整數(shù)的double值。如果兩個整數(shù)的double值都同樣接近,那么結(jié)果取偶數(shù)
總結(jié)
以上是生活随笔為你收集整理的java重载方法math_Java语言程序设计(十二)Math数学类,方法重载及变量作用域...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “金涧测泉脉”下一句是什么
- 下一篇: Java如何避免重量级锁,Java 中锁