java重载方法math_Java语言程序设计(十二)Math数学类,方法重载及变量作用域...
1.重載方法
上一篇文章用到的max方法只能用于int型數據類型,但是如果需要決定兩個浮點數中哪個較大,解決方法是創建另一個方法名相同但參數不同的方法,代碼如下:
public static double max(double num1, double num2){
if(num1>num2)
return num1;
else
return num2;
}
如果調用帶int型參數的max方法,就將調用需要int型的max方法,如果需要double型參數的max方法,就將調用需要double型參數的max方法,這稱為方法重載,在一個類中有兩個方法,它們具有相同的名字,但有不同的參數列表,Java編譯器根據方法簽名決定使用哪個方法。
下面我們用一個例子來說明,我們想寫一個程序,程序中創建三個方法,第一個方法為求最大整數,第二個方法為求最大雙精度數,第三個方法求三個雙精度數中的最大值,這三個方法都被命名為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);
}
}
當調用max(3,4)時,調用的是兩個整數中較大值的max方法,當調用max(3.0,4.5)時,調用的是求兩個雙精度數中較大值的max方法。當調用max(3.0,5.4,10.14)時,調用的是求三個雙精度數中最大值的max方法。
我們同樣也可以調用像max(3,2.5)這樣帶一個int值和一個double值得max方法,那就是調用求兩個double數中較大值的方法,實參值2自動轉換為double值,然后傳遞給這個方法。
我們可能都會有一些疑惑,那就是為什么調用max(3,4)時不會使用max(double,double)呢,其實max(double,double)和max(int,int)都是可能的匹配,在調用方法時,Java編譯器尋找最精確匹配的方法,因為int更為精確,所以調用的是max(int,int),如果兩個方法誰也不比誰精確,就會出現歧義,導致編譯錯誤。
2.變量的作用域
變量的作用域是指變量可以在程序中引用的范圍,在方法中定義的變量稱為局部變量。局部變量的作用域從聲明變量的地方開始,直到包含該變量的塊結束為止。局部變量都必須在使用之前進行聲明和賦值,下面舉一個例子:
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");
這個程序的錯誤在于,我們不要在塊內聲明變量,然后企圖在塊外使用它,因為i沒有在for循環之外定義,所以最后一條語句就會產生一個語法錯誤。
3.Math數學類
Math類包含完成基本數學函數所需的方法,我們在之前的學習中已經
使用過方法pow(a,b),也使用過方法Math.random,我們這次會介紹Math類中其他的方法,這些方法分為三類:三角函數方法,指數函數方法和服務方法,除了這些方法之外,Math類還提供了兩個很有用的double型常量,PI和E(自然對數的底),可以在任意程序中用Math.PI和Math.E的形式來使用這兩個常量。
(1)三角函數方法
Math類包含下面的三角函數方法:
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的參數都是以弧度為單位的角,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)指數函數方法
Math類中有五個與指數函數有關的方法:
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方法返回兩個數的最小值和最大值,重載abs返回一個數的絕對值。Math.abs(-2) returns 2
4.random方法
我們已經使用過random方法,生成大于等于0.0小于1.0的double型隨機數,我們可以用它編寫簡單的表達式,生成任意范圍的隨機數。
int (Math.random()*10)? 返回0到9之間的隨機數。
50+ (int)(Math.random()*10)? 返回50到59之間的隨機數。
a + (int)(Math.random()*b) ? 返回一個a到a+b之間但不包括a+b的隨機數
5.取整方法
public static double ceil(double x)? 返回比這個數大的最近的整數
public static double floor(double x)? 返回比這個小的最近的整數
public static double rint(double x) ?返回其值最接近參數并且是整數的double值。如果兩個整數的double值都同樣接近,那么結果取偶數
總結
以上是生活随笔為你收集整理的java重载方法math_Java语言程序设计(十二)Math数学类,方法重载及变量作用域...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “金涧测泉脉”下一句是什么
- 下一篇: java线程池任务失败_ThreadPo