隨機取值,同時保證集合中每個值都會被取到

2021-09-11 23:03:34 字數 880 閱讀 3314

首先,我們需要定義乙個集合,用來存放要選的資源,並做初始化概率,因需求中要求每乙個值取到的概率相同,故每個值得概率即為元素數量分之一。這裡簡化使用字串做示意,可以根據需要自行修改。

public listlistmovies;

private float probability;

private void probabilityinit()

}

接下來要開始算概率取值了,原理上,要保證每個元素取到的概率相同,那麼簡單操作為,取到值得概率降低,同時未取到值的概率公升高。這裡同樣簡化為公升高、降低都為1%,可自行修改。

private void getmovie()

}for (int i = 0; i < probability.length; i++)

else}}

}private int makerandomvalue(float arg_probabilitytable)

movieprobability -= arg_probabilitytable[j];

}return arg_probabilitytable.length;

}

如此將得到結果:

可以看到,每個值都取到,並且取得次數相差不大,如此當執行一定時間後:

時間問題不做過長時間的測試,目前看來,最多與最少次數的差值稍大,但是整體看還是可以滿足我們的需求的。

有更好的方法,歡迎討論。

java中Map集合取值方法KeySet

返回值型別set方法是 keyset 返回此對映中包含的鍵的 set 集合 將map中所有的鍵存入到set集合,因為set具備迭代器,所以可以用迭代方式取出所有的鍵 再根據get 方法 獲取每乙個鍵對應的值 舉例 1.從命令列讀入乙個隊名,輸出該隊獲得冠軍是哪一年 以下面五屆資料作為基礎資料 如果該...

DataSet取值並儲存在List集合中

dbhelper db new dbhelper 例項化db類 string sql select from student 虛構的sql語句 dataset ds db.getdataset sql 假設的db類中已返回的資料 用dataset接收 list students new list 例...

java中修改檔案名字,保證檔案中每一行資料不重複

下面的例子是除錯通過的 public class renamefiles bw.write name t n 換行儲存 f.renameto new file ppath name bw.close 如果下面要繼續讀這個檔案的內容,必須先關閉流 writer.close 保證檔案中每行的內容不重複 ...