JavaSE基礎:Math類和Random類

胖先森發表於2018-02-10

數學計算Math類

Math類就屬於方法類知識,雖然在實際專案中很少用到,但是總會用到。

那在Java中Math類是幹嘛的? Math類在java.lang包中,包含完成基本數學函式所需的方法。

1.運算元據

Math類位於java.lang包中,包含用於執行基本數學運算的方法,Math類的所有方法都是靜態方法,所以使用該類中的方法時,可以直接使用類名.方法名,如:Math.round();

編號 方法名稱 型別 描述
1 public static long round(double a) 靜態方法 返回四捨五入的整數
2 public static double floor(double a) 靜態方法 返回小於引數的最大整數(地板數)
3 public static double ceil(double a) 靜態方法 返回大於引數的最大整數(天花板數)
4 public static double random() 靜態方法 返回[0,1)之間隨機的浮點數
package com.shxt.demo03;

public class Demo01 {
    public static void main(String[] args) {
        double num = 13.56; // 定義一個double型別的變數

        int a = (int)num; //強制型別轉換,將double型別強制轉換為int型別
        System.out.println("強制型別轉化:"+a);

        long b = Math.round(num); //呼叫round方法,進行四捨五入
        System.out.println("四捨五入:"+b);

        double c = Math.floor(num);//地板數
        System.out.println("地板數:"+c);

        double d = Math.ceil(num);//天花板數
        System.out.println("天花板數:"+d);

        double e = Math.random(); //返回[0,1)之間隨機的浮點數
        System.out.println("隨機數字[0,1):"+e);

        //返回0-99的整數
        int f = (int)(Math.random()*99);
        System.out.println("隨機整數[0,99):"+f);

    }
}
/*
執行結果為:
	強制型別轉化:13
    四捨五入:14
    地板數:13.0
    天花板數:14.0
    隨機數字[0,1):9.71689600570258E-4
    隨機整數[0,99):29
*/
複製程式碼

示例:定義一個包含10個元素的整型陣列,通過隨機產生10以內的隨機數,給陣列中的每個元素賦值,並輸出結果

package com.shxt.demo03;

public class Demo02 {
    public static void main(String[] args) {
       int[] nums = new int[10];

        for (int i = 0; i < 10; i++) {
            nums[i]=(int)(Math.random()*10);
        }

        for (int num : nums){
            System.out.print(num+",");
        }

    }
}
複製程式碼

2.三角函式

來源API的解釋,自己使用的時候方便查詢而已,推薦檢視官方API

編號 方法名稱 型別 描述
1 public static double toDegrees(double angrad) 靜態方法 將-π/2到π/2之間的弧度值轉化為度 例如:
Math.toDegrees(Math.PI/2)結果為90.0;
2 public static double toRadians(double angdeg) 靜態方法 將度轉化為-π/2到π/2之間的弧度值 例如:
Math.toRadians(30)結果為 π/6;
3 public static double sin(double a) 靜態方法 返回角的三角正弦
4 public static double cos(double a) 靜態方法 返回角的三角餘弦
5 public static double tan(double a) 靜態方法 返回角的三角正切
6 public static double asin(double a) 靜態方法 返回一個值的反正弦;
返回的角度範圍在 -pi/2 到 pi/2 之間
7 public static double acos(double a) 靜態方法 返回一個值的反餘弦;返回的角度範圍在 0.0 到 pi 之間
8 public static double atan(double a) 靜態方法 返回一個值的反正切;返回的角度範圍在 -pi/2 到 pi/2 之間

3.指數函式

編號 方法名稱 型別 描述
1 public static double exp(double a) 靜態方法 獲得以e為底a為指數的數值
2 public static double log(double a) 靜態方法 對數函式
3 public static double log10(double a) 靜態方法 底數為 10 的對數
4 public static double pow(double a, double b) 靜態方法 a為底b為指數的值
5 public static double sqrt(double a) 靜態方法 正平方根

4.最大值,最小值,絕對值

編號 方法名稱 型別 描述
1 public static double max(double a, double b) 靜態方法 最大值
2 public static float max(float a, float b) 靜態方法 最大值
3 public static int max(int a, int b) 靜態方法 最大值
4 public static long max(long a, long b) 靜態方法 最大值
5 public static double min(double a, double b) 靜態方法 最小值
6 public static float min(float a, float b) 靜態方法 最小值
7 public static int min(int a, int b) 靜態方法 最小值
8 public static long min(long a, long b) 靜態方法 最小值
9 public static double abs(double a) 靜態方法 絕對值

關於數學計算的Math類,根據實際的需要,查閱API文件才是正道!

隨機數Random類

Random類中實現的隨機演算法是偽隨機,也就是有規則的隨機。在進行隨機時,隨機演算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。相同種子數的Random物件,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的Random物件,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同,這點在生成多個隨機數字時需要特別注意。

1.Random的構造方法

public Random()
複製程式碼

該構造方法使用一個和當前系統時間對應的相對時間有關的數字作為種子數,然後使用這個種子數構造Random物件

public Random(long seed)
複製程式碼

該構造方法可以通過制定一個種子數進行建立

Random r = new Random();  
Random r1 = new Random(100);
複製程式碼

注意:種子數只是隨機演算法的起源數字和生成的隨機數字的區間無關。

2.常用方法

Random類中各方法生成的隨機數字都是均勻分佈的,也就是說區間內部的數字生成的機率是均等的。

編號 方法名稱 型別 描述
1 public boolean nextBoolean() 普通方法 生成一個隨機的boolean值,
生成true和false的值機率相等,
也就是都是50%的機率
2 public double nextDouble() 普通方法 生成一個隨機的double值,數值介於[0,1.0)之間
3 public int nextInt() 普通方法 生成一個隨機的int值,該值介於int的區間,
也就是-231到231-1之間
4 public int nextInt(int n) 普通方法 生成一個隨機的int值,該值介於[0,n)的區間,
也就是0到n之間的隨機int值
5 public void setSeed(long seed) 普通方法 重新設定Random物件中的種子數
package com.shxt.demo04;

import java.util.Random;

public class Demo01 {
    public static void main(String[] args) {
        Random random = new Random();

        double num1 = random.nextDouble();
        System.out.println("生成[0,1.0)區間的小數:"+num1);

        //生成[0,10.0)區間的小數:將該區間擴大10倍即是要求的區間
        double num2 = random.nextDouble()*10;
        System.out.println("生成[0,10.0)區間的小數:"+num2);

        //生成[1,5.5)區間的小數:只需要首先生成[0,5.5)區間的隨機數字,然後將生成的隨機數區間加1即可
        double num3 = random.nextDouble()*5.5+1;
        System.out.println("生成[1,5.5)區間的小數:"+num3);

        //生成任意整數:直接使用nextInt方法即可
        int num4 = random.nextInt();
        System.out.println("生成任意的整數:"+num4);

        //生成[0,100)區間的整數
        int num5 = random.nextInt(100);
        System.out.println("生成[0,100)區間的整數:"+num5);

        //生成[-100,100)區間的整數
        int num6 = random.nextInt(200)-100;
        System.out.println("生成[-100,100)區間的整數:"+num6);

    }
}

複製程式碼

相關文章