From 3dadbe13b9e90546d50a46ad6a0028352f900bec Mon Sep 17 00:00:00 2001 From: "ray.j.greenwell" Date: Wed, 13 Oct 2010 00:12:50 +0000 Subject: [PATCH] What was I thinking?: we can't just pick a random number once. Unsmoke that crack. git-svn-id: https://samskivert.googlecode.com/svn/trunk@2916 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- src/main/java/com/samskivert/util/Randoms.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/samskivert/util/Randoms.java b/src/main/java/com/samskivert/util/Randoms.java index f5b4ef26..22f2f649 100644 --- a/src/main/java/com/samskivert/util/Randoms.java +++ b/src/main/java/com/samskivert/util/Randoms.java @@ -146,18 +146,20 @@ public class Randoms * Pick a random key from the specified mapping of weight values, or return * ifEmpty if no mapping has a weight greater than 0. * + *

Implementation note: a random number is generated for every entry with a + * non-zero weight. + * * @throws IllegalArgumentException if any weight is less than 0. */ public T pick (Map weightMap, T ifEmpty) { T pick = ifEmpty; - double r = _r.nextDouble(); double total = 0.0; for (Map.Entry entry : weightMap.entrySet()) { double weight = entry.getValue().doubleValue(); if (weight > 0.0) { total += weight; - if ((r * total) < weight) { + if ((_r.nextDouble() * total) < weight) { pick = entry.getKey(); } } else if (weight < 0.0) {