2009年2月8日 星期日

Java小練習(10) -- 亂數小練習

題目要求1:產生六個相鄰兩數不重複的亂數,亂數值介於1~100之間,並印出來。 想法:相鄰兩數不重複,可以用if作判斷;作六次可以用while來控制。
public class RandomTest {

    public static void main(String[] args) {
        byte temp = 0;
        byte count = 0;
        RandomTest ob1 = new RandomTest();
        temp = ob1.getRandom();
        count++;
        System.out.println("第" + count + "次的亂數值為" + temp);

        label:
        while (count < 6) {
            byte _temp = ob1.getRandom();
            if (_temp != temp) {
                temp = _temp;
                count++;
                System.out.println("第" + count + "次的亂數值為" + temp);
                continue label; //再回去取下一個亂數值。
            } else {
                continue label; //甚麼也不做,再取一次。
            }
        }

    }

    //取1-100之間的亂數方法
    public byte getRandom() {
        return ((byte) (Math.random() * 8 + 1));
    }
}
題目要求2: 改進要求1,取六個亂數,但這六個亂數絕對不能重複。 想法:
先做一個100個空間的陣列,依序放1-100
再依序由此陣列提取亂數6次。
提取陣列後便將該欄位清空為零,
從此陣列提取數值時,為零的就不提取,以保證不會重複。
public class ArrayTest1 {

    public static void main(String[] args) {
        int[] data = new int[100]; //作一個100個空間的整數陣列
        for (int i = 0; i < data.length; i++ ) {//依序放1-100
            data[i] = i + 1;
        }
        int count = 0; //用計數器取六次
        while (count != 6) {
            //作一個0~99的亂數當成陣列索引值。
            int random = (int) ( Math.random()*100 ); 
            //取出後就把該值設為0,遇到0就不取值。
            if (data[random] != 0) {
                System.out.println(data[random]);
                data[random] = 0;
                count++;
            }
        }
    }
} 

沒有留言: