Answers for "random chance in java"

0

java random chance

import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;

public class RandomChance {

    private final Map<?, Double> map;
    private final ThreadLocalRandom random = ThreadLocalRandom.current();

    /**
     *
     * @param map This map can contain any object as the key and must contain a double as the chance for that key to be chosen
     */
    public RandomChance(Map<?, Double> map) {
        this.map = map;
    }

    /**
     * @param input  is the double you wish to check
     * @param first  is the first double that the input must be between
     * @param second is the second double the input needs to be between
     * @return will return true if input is between first and second
     */
    private boolean isBetween(double input, double first, double second) {
        return input <= Math.max(first, second) && input >= Math.min(first, second);
    }
    
    /**
     * 
     * @return will loop through the map passed into the constructor and randomly pick a value based on the chance provided
     */  
    public Object get() {
        double total = map.values().stream().mapToDouble(e -> e).sum();
        double placeHolder = 0.0;
        double randomNumber = random.nextDouble(total);
        for (Object obj : map.keySet()) {
            double upperBound = placeHolder + map.get(obj);
            if (isBetween(randomNumber, placeHolder, upperBound)) {
                return obj;
            } else {
                placeHolder = upperBound;
            }
        }
        return null;
    }
}
Posted by: Guest on June-14-2021

Code answers related to "Java"

Java Answers by Framework

Browse Popular Code Answers by Language