Java™ 教程(超越基本算術)

博弈發表於2019-01-19

超越基本算術

Java程式語言支援基本算術及其算術運算子:+-*/java.lang包中的Math類提供了用於執行更高階數學計算的方法和常量。

Math類中的方法都是靜態的,因此你可以直接從類中呼叫它們,如下所示:

Math.cos(angle);

使用靜態匯入語言功能,你不必在每個數學函式前面寫Math

import static java.lang.Math.*;

這允許你通過簡單名稱呼叫Math類方法,例如:

cos(angle);

常量和基本方法

Math類包含兩個常量:

  • Math.E,是自然對數的基數。
  • Math.PI,這是圓周率。

Math類還包含40多種靜態方法,下表列出了許多基本方法。

方法 描述
double abs(double d)
float abs(float f)
int abs(int i)
long abs(long lng)
返回引數的絕對值。
double ceil(double d) 返回大於或等於引數的最小整數,作為double返回。
double floor(double d) 返回小於或等於引數的最大整數,作為double返回。
double rint(double d) 返回與引數值最接近的整數,作為double返回。
long round(double d)
int round(float f)
根據方法的返回型別,返回與引數最近的longint
double min(double arg1, double arg2)
float min(float arg1, float arg2)
int min(int arg1, int arg2)
long min(long arg1, long arg2)
返回兩個引數中較小的一個。
double max(double arg1, double arg2)
float max(float arg1, float arg2)
int max(int arg1, int arg2)
long max(long arg1, long arg2)
返回兩個引數中較大的一個。

以下程式BasicMathDemo說明了如何使用其中一些方法:

public class BasicMathDemo {
    public static void main(String[] args) {
        double a = -191.635;
        double b = 43.74;
        int c = 16, d = 45;

        System.out.printf("The absolute value " + "of %.3f is %.3f%n", 
                          a, Math.abs(a));

        System.out.printf("The ceiling of " + "%.2f is %.0f%n", 
                          b, Math.ceil(b));

        System.out.printf("The floor of " + "%.2f is %.0f%n", 
                          b, Math.floor(b));

        System.out.printf("The rint of %.2f " + "is %.0f%n", 
                          b, Math.rint(b));

        System.out.printf("The max of %d and " + "%d is %d%n",
                          c, d, Math.max(c, d));

        System.out.printf("The min of of %d " + "and %d is %d%n",
                          c, d, Math.min(c, d));
    }
}

這是該程式的輸出:

The absolute value of -191.635 is 191.635
The ceiling of 43.74 is 44
The floor of 43.74 is 43
The rint of 43.74 is 44
The max of 16 and 45 is 45
The min of 16 and 45 is 16

指數和對數方法

下表列出了Math類的指數和對數方法。

方法 描述
double exp(double d) 返回自然對數的基數e的引數次方。
double log(double d) 返回引數的自然對數。
double pow(double base, double exponent) 返回第一個引數的值提升到第二個引數的次冪。
double sqrt(double d) 返回引數的平方根。

以下程式ExponentialDemo顯示e的值,然後對任意選擇的數字呼叫上表中列出的每個方法:

public class ExponentialDemo {
    public static void main(String[] args) {
        double x = 11.635;
        double y = 2.76;

        System.out.printf("The value of " + "e is %.4f%n",
                          Math.E);

        System.out.printf("exp(%.3f) " + "is %.3f%n",
                          x, Math.exp(x));

        System.out.printf("log(%.3f) is " + "%.3f%n",
                          x, Math.log(x));

        System.out.printf("pow(%.3f, %.3f) " + "is %.3f%n",
                          x, y, Math.pow(x, y));

        System.out.printf("sqrt(%.3f) is " + "%.3f%n",
                          x, Math.sqrt(x));
    }
}

這是執行ExponentialDemo時你將看到的輸出:

The value of e is 2.7183
exp(11.635) is 112983.831
log(11.635) is 2.454
pow(11.635, 2.760) is 874.008
sqrt(11.635) is 3.411

三角函式的方法

Math類還提供了三角函式功能的集合,如下表所示,傳遞給每個方法的值是以弧度表示的角度,你可以使用toRadians方法將度數轉換為弧度。

方法 描述
double sin(double d) 返回指定double值的正弦值。
double cos(double d) 返回指定double值的餘弦值。
double tan(double d) 返回指定double值的正切值。
double asin(double d) 返回指定double值的反正弦值。
double acos(double d) 返回指定double值的反餘弦值。
double atan(double d) 返回指定double值的反正切值。
double atan2(double y, double x) 將直角座標(x,y)轉換為極座標(r,theta)並返回theta。
double toDegrees(double d)
double toDegrees(double d)
將引數轉換為度數或弧度。

這是一個程式TrigonometricDemo,它使用這些方法中的每一個來計算45度角的各種三角函式值:

public class TrigonometricDemo {
    public static void main(String[] args) {
        double degrees = 45.0;
        double radians = Math.toRadians(degrees);
        
        System.out.format("The value of pi " + "is %.4f%n",
                           Math.PI);

        System.out.format("The sine of %.1f " + "degrees is %.4f%n",
                          degrees, Math.sin(radians));

        System.out.format("The cosine of %.1f " + "degrees is %.4f%n",
                          degrees, Math.cos(radians));

        System.out.format("The tangent of %.1f " + "degrees is %.4f%n",
                          degrees, Math.tan(radians));

        System.out.format("The arcsine of %.4f " + "is %.4f degrees %n", 
                          Math.sin(radians), 
                          Math.toDegrees(Math.asin(Math.sin(radians))));

        System.out.format("The arccosine of %.4f " + "is %.4f degrees %n", 
                          Math.cos(radians),  
                          Math.toDegrees(Math.acos(Math.cos(radians))));

        System.out.format("The arctangent of %.4f " + "is %.4f degrees %n", 
                          Math.tan(radians), 
                          Math.toDegrees(Math.atan(Math.tan(radians))));
    }
}

該程式的輸出如下:

The value of pi is 3.1416
The sine of 45.0 degrees is 0.7071
The cosine of 45.0 degrees is 0.7071
The tangent of 45.0 degrees is 1.0000
The arcsine of 0.7071 is 45.0000 degrees
The arccosine of 0.7071 is 45.0000 degrees
The arctangent of 1.0000 is 45.0000 degrees

隨機數

random()方法返回一個介於0.0和1.0之間的偽隨機選擇的數字,範圍包括0.0但不包括1.0,換句話說:0.0 <= Math.random() < 1.0。要獲取不同範圍內的數字,可以對隨機方法返回的值執行算術運算,例如,要生成0到9之間的整數,你可以編寫:

int number = (int)(Math.random() * 10);

通過將該值乘以10,可能值的範圍變為0.0 <= number < 10.0

當你需要生成單個隨機數時,使用Math.random可以很好地工作,如果需要生成一系列隨機數,則應建立java.util.Random例項並在該物件上呼叫方法以生成數字。


上一篇:格式化數字列印輸出

下一篇:字元

相關文章