列舉兩種常用的:
第一種:new Random(),nextInt(10),范圍是1~10,以括號里面的值限制范圍。
1 public class Test { 2 public static void main(String[] args) { 3 Random random = new Random(3); 4 int ranNum = random.nextInt(10); 5 System.out.println(ranNum); 6 } 7 }
random里其實是一個數列,這個數列每一位的數字接近隨機分布,可以從數學上證明,但是一個數列一定是確定的,也就是第一個是什么數,第二個什么數都是固定的,就像1,2,3,4.。。。但是可以通過一個種子選取數列的起始位置,例如,上面的數列從3開始,就是3,4,。。。這就使每次的隨機數都不相同。而這個種子一般使用程序運行時對應時間的秒(從某一年開始總的秒數),每次的隨機數就不同了,產生可以使用的偽隨機數。
即種子用於隨機數生成器初始化值,隨機生成器對於特定的種子值總是產生相同的隨機數序列。
一般Random random = new Random();系統采取當前時間毫秒數做種子數做到隨機不然的話寫了種子數隨機數就是定值了。
而random.nextInt(10)這個方法的作用是生成一個隨機的int值,該值介於[0,n)的區間,也就是0到n之間的隨機int值,包含0而不包含n。
再舉個列子:
public class Test { public static void main(String[] args) { Random random = new Random(9); int ranNum = random.nextInt(10); System.out.println(ranNum); } }
得到的結果只能是:9
第二種:Math.random()是令系統隨機選取大於等於 0.0 且小於 1.0 的偽隨機 double 值。例如:double a=Math.random()*(3-1)+1,設置一個隨機1到3的變量。
(Math.random()*max-min)+min,用法如下:
1 public class Test { 2 public static void main(String[] args) { 3 double ranNum = (Math.random()*100-1)+1; 4 System.out.println(ranNum); 5 System.out.println("強轉后:"+(int)ranNum); 6 } 7 }
結果如下圖:
得到是一個double類型的數值,將它強轉為int類型的就好了。