JAVA 如何取/產生亂數 (大學程式設計 第三課)

JAVA程式如何取亂數呢


這邊提供兩個辦法:

1.使用java.util.Random

 首先先在程式前面import進這個類別
( import 就是在程式開頭,事先說明程式中會用到那些類別 )

更多使用方法參考JAVA API
http://docs.oracle.com/javase/7/docs/api/

import java.util.Random;

public class test {
    public static void main(String[] args) {
        ...
        ...
    }
}

接著在程式中將這類別「產生」(new)出來

Random ran = new Random(); //宣告一個Random,變數名稱為ran

這類別可以說是「亂數產生器」,你可以指定要他產生哪種類型的亂數(小數、整數)

以及亂數的範圍

接著可以對Random進行操作(使用method)

一般來說,要取整數的亂數就用nextInt(產生亂數範圍)

例如我現在要寫一個取1~42範圍的程式

import java.util.Random;
public class test {
    public static void main(String[] args) {
        Random ran = new Random();
        System.out.println(ran.nextInt(42)+1);

        //這邊要+1是因為原本範圍為0~41 有42個變數
        //+1之後變成1~42
    }
}



2.使用Math.random()

若使用這個方法,則不需要事先import

因為Math這類別是在java.lang.Math

JAVA事先就把java.lang下的所有類別載入了 (這些是常用類別)

Math這類別下有許多數學方法喔,詳細請找api

我們現在要用的random()是會回傳一個介於0到1之間的double值(不會等於1)

因此,如果要取寫一個取1~42範圍的程式

public class test {
    public static void main(String[] args) {
        System.out.println("本期開獎號碼為:");
        System.out.print((int)(Math.random()*42+1) + " "); 
    }
}

看起來比較複雜,這是強制轉型的方法
(強制轉型指的是將一個比較大的變數化為一個比較小的變數
這裡double要轉成int則必須捨去小數的部分,因此不能夠直接轉過去)

Math.random()*41+1
得到的是一個1~42的double值(含有小數)

這時我們在他的前面加上(int),就可以令他強制轉型成整數了


****
此內容為大學資訊工程系一年級JAVA程式設計課程之內容

參考投影片

13 則留言:

  1. 剛好需要您這篇文章的教學,很詳細喔!

    回覆刪除
  2. 請問一下~如何讓Random隨機選取2個以上的數,但是不重覆呢?
    我試著用你第一個import java.util.Random的方式寫了一個抽籤的程式
    一次抽三個的時候跑出兩個一樣的

    回覆刪除
    回覆
    1. 一樣取兩次,檢查兩數是否相等,若是重取一數,loop

      刪除
    2. 作者已經移除這則留言。

      刪除
    3. 作者已經移除這則留言。

      刪除
  3. 如果要取 500- 1000作法該怎麼操作?

    回覆刪除
  4. Unknown

    ran.nextInt(42)+1 改成
    ran.nextInt(501)+500就好了
    取0~500的變數+上500 等於取500~1000的變數

    回覆刪除
  5. Math.random()產生的是[0,1)之間的亂數。(不包含1)

    我想問有沒有辦法產生[0,1]之間的亂數?(包含1)

    回覆刪除
  6. 我在
    Math.random寫
    int n = (int) Math.random()*99 +1;
    可是他似乎只出現1...

    回覆刪除
  7. 改成這樣就行了
    int n = (int) (Math.random()*99 +1); //產生1~99的亂數
    int n = (int) (Math.random()*100 +1); //產生1~100的亂數
    int n = (int) (Math.random()*101); //產生0~100的亂數

    回覆刪除
  8. 作者已經移除這則留言。

    回覆刪除