1. 程式人生 > >Java學習筆記26(Math類、Arrays類、BigInteger類、BigDecimal類)

Java學習筆記26(Math類、Arrays類、BigInteger類、BigDecimal類)

body log 出現異常 multi 有序 對數 浮點數 dex random

Math類:數學工具類,做一些數學計算,開方,對數,三角函數等

所有方法都是靜態方法,不需要建立對象,直接用類名調用即可

示例:

這裏寫幾個在日常開發中會用到的,比如三角函數之類的平時不會用到,了解即可

package demo;

public class MathDemo {
    public static void main(String[] args) {
        function1();
        function2();
        function3();
        function4();
        function5();
    }

    
public static void function1() { int i = Math.abs(-9); System.out.println(i); // 輸出:9,求絕對值 } public static void function2() { double d1 = Math.floor(6.5); double d2 = Math.ceil(6.5); System.out.println(d1);// 6.0 System.out.println(d2);// 7.0 }
public static void function3() { double d1 = Math.pow(2.0, 3.0); System.out.println(d1); // 2的3次方,輸出:8.0 double d2 = Math.sqrt(4.0); System.out.println(d2); // 4開發,輸出2.0 } public static void function4() { for (int i = 0; i < 10; i++) {
double d = Math.random(); System.out.println(d); //打印隨機數,介於0到1 } } public static void function5() { double d = Math.round(1.4234); System.out.println(d); //輸出1.0,得到四舍五入值 } }

Arrays類:數組工具類,幫助我們對數組進行一些操作:

有些方法可以在日常開發中為我們節省很多代碼

示例:

package demo;

import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        function1();
        function2();
        function3();
    }
    
    public static void function1(){
        //對數組升序排列,這裏用了比冒泡排序性能高很多的快排
        int[] arr = {5,4,8,7,3,1,6};
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        //升序打印
    }
    
    public static void function2(){
        //數組的二分查找法,我的第6篇文章有原理介紹,與這裏的原理大致上相同
        int[] arr = {11,4,5,7,9,13,1};
        //二分法前提是有序數組
        Arrays.sort(arr);
        int index = Arrays.binarySearch(arr, 7);
        System.out.println(index);//排序後7的所有是3
        //這裏需要註意:如果這個元素在數組中不存在
        //那麽返回一個負數:(-插入點-1)
    }
    
    public static void function3(){
        int[] arr = {1,2,3,4,5};
        String string = Arrays.toString(arr);
        System.out.println(string);
        //輸出:[1, 2, 3, 4, 5]    字符串
        //原理在我的前幾篇文章中寫過
    }
}

有時候數組超過long型的大小,需要計算,怎麽辦?

BigInteger類:大數運算

示例:

package demo;

import java.math.BigInteger;

public class BigIntegerDemo {
    public static void main(String[] args) {
        function();
    }

    public static void function() {
        BigInteger b1 = new BigInteger("6666666666666666666666666666666");
        BigInteger b2 = new BigInteger("1234567891234567891234567891231123123");
        BigInteger b3 = b1.add(b2);// b1+b2
        System.out.println(b3);// 1234574557901234557901234557897789789
        BigInteger b4 = b1.subtract(b2);// b1-b2
        System.out.println(b4);// -1234561224567901224567901224564456457
        BigInteger b5 = b1.multiply(b2);// b1*b2
        System.out.println(b5);// 很長一個數,這裏不再復制
        BigInteger b6 = b2.divide(b1);// b2/b1
        System.out.println(b6);// 185185

    }
}

BigDecimal類:浮點大數運行,提高浮點數運算精度

示例:

package demo;

import java.math.BigDecimal;

public class BigDecimalDemo {
    public static void main(String[] args) {
        System.out.println(0.09+0.01);//輸出0.99999
        System.out.println(1.0-0.32);//輸出0.67999
        //發現這裏會出現不合適的結果
        //原因:計算機二進制中,表示浮點數不精確造成的
        //解決方法:BigDecimal類
        function1();
        function2();
    }
    public static void function1(){
        BigDecimal b1 = new BigDecimal("0.09");
        BigDecimal b2 = new BigDecimal("0.01");
        BigDecimal b3 = b1.add(b2);//b1+b2
        System.out.println(b3);//得到0.10,正確
        
        BigDecimal b4 = new BigDecimal("1.0");
        BigDecimal b5 = new BigDecimal("0.32");
        BigDecimal b6 = b4.subtract(b5);//b4-b5
        System.out.println(b6);//0.68,正確
        
        BigDecimal b7 = b1.multiply(b2);//b1*b2
        System.out.println(b7);//0.0009,正確
    }
    public static void function2(){
        //除法方面有一些區別,需要註意下
        BigDecimal b1 = new BigDecimal("1.301");
        BigDecimal b2 = new BigDecimal("101");
        //BigDecimal b3 = b1.divide(b2);//如果不整除這裏會出現異常
        BigDecimal b3 = b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);
        //第二個參數是保留兩位小數的意思
        //第三個參數是保留模式:最接近的數字舍入(即為四舍五入保留模式),還有很多其他模式
        System.out.println(b3);//保留兩位,得到0.02的結果
    }
    
}

Java學習筆記26(Math類、Arrays類、BigInteger類、BigDecimal類)