2015-04-12 38 views
1

這是我的陣列入門的最大隨機範圍選擇的

[0.12, 0.13, 0.3, 0.5, 0.75]; 

從這個陣列I計算的總和的累積陣列:

[ 0.12, 0.25, 0.55, 1.05, 1.8 ] 

我生成最低和最高值從之間RAND值陣列:

var randNumber = (Math.random() * (max - min)) + min; 

在以下情況下,min=0.12max=1.18

我需要累積陣列中蘭德數量下降英寸 的間隔比如蘭德人數可能1.5948337644897403然後數下降1.05和1.8之間的話,我會挑1.05

問題是數組的最後一個元素從未被選出。如何得到數組的最後一個元素?

+1

'數下降1.05和1.8之間的話,我會挑1.05 「那麼你什麼時候會選擇1.8? – thefourtheye

+1

@thefourtheye我認爲這是問題所在。邏輯錯誤。我不明白你爲什麼使用這種方法從數組中獲得一個隨機數,@Mazzy? – orhanhenrik

+0

@thefourtheye這就是我想解決的問題 – Mazzy

回答

2

問題是,您得到的值爲minmax之間的隨機值,並且您得到的值低於隨機值。被排除的物品實際上是第一件物品,但由於您獲得了錯誤的物品,所有的重量都將是錯誤的,並且您將永遠不會得到最後一件物品。

你應該得到的零和max之間的隨機值,否則你會排除數組中的第一項:

var randNumber = Math.random() * max; 

您應該然後用比隨機數高的值獲得該項目:

var index = arr.length - 1; 
while (index > 0 && arr[index - 1] >= randNumber) index--; 

下面是測試表明這些權重是正確的:http://jsfiddle.net/Guffa/kgbL4rsc/