朋友問我一個問題:“隨機出來1~100中的10個數字,不能有任何重複的數字出現,但是要求不能每次對隨機出的數進行驗證”,要是沒有最後一個要求那就很簡單了,不能對每次隨機的數字進行驗證,這就是說要一次隨機出來的數字就是唯一的,這也就是說下一次隨機的數組中就不能有已經輸出的數字了,呵呵,想到一個辦法,
1、把你最終的結果預先放在一個數組中;
2、random產生一個隨機下標,我們取出對應的數組中的值;
3、然後用數組最後一個值替換下標數組中的值;
4、將產生隨機下標的範圍逐個減少1;
public class MyRandom1{
private static Random random=new Random();
public static void main(String[ ] args ){
int NUM=100;
int cont[ ]=new int[NUM];
for (int i=1;i<NUM;i++){
cont[i]=1;
}
for(int j=0;j<NUM;j++){
int index=random.nextInt(100);
System.out.println("The random number is :"+cont[index]);
cont[index]=cont[NUM-1-j];
}
}
};
這個不是很好的演算法就解決了這個問題,由於數字很少,使用一個簡單的數組就能解決問題了,隨之而來,我找個了一個很好的題目:
某單位要設計一個考核,題庫裡總共有100道題目,其中30道選擇題,30道填空題,20道問答題,20道論敘題;每次出題採用的是考生自己選擇考核時間然後電腦隨機出題,每次出20道選擇題,20道填空題,10道問答題,10道論敘題,每張試卷出題不能有重複,確定考核開始,開始時間倒記時,考核時間可以由考核人員確定,距離結束時間5分鐘出現對話方塊時提示考生,還有30秒時出現聲音提示,時間到了準時自動交卷;
這個到記時以及出現對話方塊的設計都很簡單,重點他也有個要求,就是和上面的要求一樣,不要驗證,並且不能模仿上面的演算法,暈,存心刁難...........