這邊提供兩個辦法:
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) {
...
...
}
}
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),就可以令他強制轉型成整數了
剛好需要您這篇文章的教學,很詳細喔!
回覆刪除學長...您過獎了!!
刪除請問一下~如何讓Random隨機選取2個以上的數,但是不重覆呢?
回覆刪除我試著用你第一個import java.util.Random的方式寫了一個抽籤的程式
一次抽三個的時候跑出兩個一樣的
一樣取兩次,檢查兩數是否相等,若是重取一數,loop
刪除作者已經移除這則留言。
刪除作者已經移除這則留言。
刪除如果要取 500- 1000作法該怎麼操作?
回覆刪除Unknown
回覆刪除ran.nextInt(42)+1 改成
ran.nextInt(501)+500就好了
取0~500的變數+上500 等於取500~1000的變數
Math.random()產生的是[0,1)之間的亂數。(不包含1)
回覆刪除我想問有沒有辦法產生[0,1]之間的亂數?(包含1)
*2
刪除我在
回覆刪除Math.random寫
int n = (int) Math.random()*99 +1;
可是他似乎只出現1...
改成這樣就行了
回覆刪除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的亂數
作者已經移除這則留言。
回覆刪除