Java詳細(xì)講解Math和Random類中有哪些常用方法
java.lang.Math當(dāng)中提供了一系列的靜態(tài)方法用于科學(xué)計(jì)算;其方法的參數(shù)和返回值的類型一般為double型。
下來(lái)我就簡(jiǎn)單的介紹一下Math類中常用的方法。
public static int abs(double a) 求絕對(duì)值
public static double sqrt(double a) 求平方根
public static double pow(double a, double b) 求a的b次冪
public static double max(double a, double b) 求a和b那個(gè)大
public static double min(double a, double b) 求a和b那個(gè)小
public static long round(double a) 將a四舍五入返回lang型
public static double floor(double a) 返回小于或等于參數(shù)的最大整數(shù),數(shù)據(jù)類型為double型
public static double ceil(double a) 返回大于或等于參數(shù)的最大整數(shù),數(shù)據(jù)類型為double型
public static double random() 返回一個(gè)double值為正號(hào),大于等于0.0 ,小于1.0
代碼演示一下上面的方法:
public class Demo01 { public static void main(String[] args) { System.out.println("求-3的絕對(duì)值為:" + Math.abs(-3)); System.out.println("求4的平方根為:" + Math.sqrt(4)); System.out.println("求2的3次方冪為:" + Math.pow(2, 3)); System.out.println("求2和3的最大值為:" + Math.max(2, 3)); System.out.println("求2和3的最小值為:" + Math.min(2, 3)); System.out.println("求9.87向下轉(zhuǎn)型的數(shù)為:" + Math.floor(9.87)); System.out.println("求9.12向上轉(zhuǎn)型的數(shù)為:" + Math.ceil(9.12)); System.out.println("求9.55的四舍五入的值為:" + Math.round(9.55)); System.out.println("求一個(gè)0.0到1.0的隨機(jī)數(shù)(不包括1.0)為:" + Math.random()); } }
Math類的源碼我就不在這做多的展示,因?yàn)樗讓佑畜w現(xiàn)的話,也非常簡(jiǎn)單,而且大多都是采用的底層操作系統(tǒng)上的去實(shí)現(xiàn)去了。
Random()方法
Random方法是java當(dāng)中獲得隨機(jī)數(shù)的類,調(diào)用它對(duì)應(yīng)的方法,可以獲得我們想要區(qū)間的隨機(jī)數(shù)。
創(chuàng)建隨機(jī)數(shù)的對(duì)象:
Random random = new Random();
Random當(dāng)中的方法并不多,我就在這先演示一下:
import java.util.Random; public class Demo03 { public static void main(String[] args) { Random random = new Random(); //返回整型里任意一個(gè) System.out.println("nextInt()輸出為:"+random.nextInt()); //返回大于等于0,小于9的任意一個(gè)整型 System.out.println("nextInt(9)輸出為:"+random.nextInt(9)); //返回Boolean型任意一個(gè) System.out.println("nextBoolean()輸出為:"+random.nextBoolean()); //返回Double當(dāng)中 0.0和 1.0之間的的任意一個(gè) System.out.println("nextDouble()輸出為:"+random.nextDouble()); } }
輸出結(jié)果:
當(dāng)想生成一個(gè)數(shù)組的隨機(jī)數(shù)的時(shí)候,也可以直接采取調(diào)用來(lái)實(shí)現(xiàn):
import java.util.Arrays; import java.util.Random; public class Demo04 { public static void main(String[] args) { Random random = new Random(); byte[] bytes = new byte[5]; random.nextBytes(bytes); System.out.println(Arrays.toString(bytes)); } }
這些方法具體的實(shí)現(xiàn),都是通過(guò)一個(gè)叫種子的東西生成的。
在這科普一個(gè)小知識(shí)點(diǎn)。
Random獲得的隨機(jī)數(shù),并不是真正的隨機(jī)數(shù),也可以說(shuō)現(xiàn)在普通用戶以及公司是沒(méi)有辦法獲得真正的隨機(jī)數(shù),而Random獲得的隨機(jī)數(shù)稱為一種偽隨機(jī)數(shù)。想要獲得真正的隨機(jī)數(shù)只能通過(guò)量子計(jì)算機(jī)獲得。
所以我們選擇獲得的隨機(jī)數(shù),大多都是通過(guò)當(dāng)前時(shí)間經(jīng)過(guò)一系列復(fù)雜的算法,得到一個(gè)隨機(jī)數(shù)。 這種復(fù)雜的算法我們就稱為種子。
所以我們也就可以通過(guò)拿到當(dāng)時(shí)生成Random對(duì)象時(shí)的種子,再傳進(jìn)去,就可以復(fù)制出它之前生成的隨機(jī)數(shù)。
現(xiàn)在讓我們先看看創(chuàng)建Random時(shí)的源碼:
在Java當(dāng)中,為了安全性,當(dāng)然也會(huì)提供給我們對(duì)應(yīng)的方法。
我們自己傳入種子,不使用Java提供的方法得到,通過(guò)自己寫(xiě)的生成隨機(jī)數(shù)。
在這我才給代碼演示一下:
public class Demo02 { public static void main(String[] args) { Random random = new Random(5); System.out.println("第一次調(diào)用:"); for (int i = 0; i < 5; i++) { System.out.println(random.nextInt()); } random = new Random(5); System.out.println("第二次調(diào)用:"); for (int i = 0; i < 5; i++) { System.out.println(random.nextInt()); } } }
這是我重讀javase基礎(chǔ)的一個(gè)系列,比起當(dāng)時(shí)初學(xué)的時(shí)候,現(xiàn)在看問(wèn)題多了個(gè)高度,理解什么也相對(duì)輕松一點(diǎn)全面一些。學(xué)習(xí)起來(lái)更加偏向閱讀源碼底層來(lái)看,多為自己幾個(gè)為什么?
到此這篇關(guān)于Java詳細(xì)講解Math和Random類中有哪些常用方法的文章就介紹到這了,更多相關(guān)Java Math和Random內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot 如何使用RestTemplate發(fā)送Post請(qǐng)求
這篇文章主要介紹了SpringBoot 如何使用RestTemplate發(fā)送Post請(qǐng)求的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08maven項(xiàng)目下solr和spring的整合配置詳解
這篇文章主要介紹了maven項(xiàng)目下solr和spring的整合配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Spring注解@Transactional失效的場(chǎng)景分析
在使用Spring中事務(wù)注解@Transactional時(shí)會(huì)存在幾種場(chǎng)景下該注解失效,即不能按照預(yù)期封裝成一個(gè)事務(wù)操作,于是本文文將對(duì)該注解進(jìn)行學(xué)習(xí)并對(duì)相關(guān)失效場(chǎng)景進(jìn)行分析,需要的朋友可以參考下2023-07-07使用CORS實(shí)現(xiàn)JavaWeb跨域請(qǐng)求問(wèn)題的方法
這篇文章主要介紹了使用Cors實(shí)現(xiàn)JavaWeb跨域請(qǐng)求問(wèn)題的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Java?Mybatis的初始化之Mapper.xml映射文件的詳解
這篇文章主要介紹了Java?Mybatis的初始化之Mapper.xml映射文件的詳解,解析完全局配置文件后接下來(lái)就是解析Mapper文件了,它是通過(guò)XMLMapperBuilder來(lái)進(jìn)行解析的2022-08-08如何自定義Jackson序列化?@JsonSerialize
這篇文章主要介紹了如何自定義Jackson序列化?@JsonSerialize,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java之如何正確地對(duì)包裝類進(jìn)行裝箱與拆箱
在這篇文章中給大家繼續(xù)講解包裝類的裝箱和拆箱問(wèn)題。你可能會(huì)很好奇,做java開(kāi)發(fā),怎么還裝起箱子來(lái)了?那么就請(qǐng)大家?guī)е苫笸驴窗?/div> 2023-04-04最新評(píng)論