Originally posted by "snoofle" ...

I found this deep in the bowels of something written by our offshore counterparts, in it's entirety:

/**
 * We all know that random number generators aren't truly random.
 * This class generates random numbers a bit more randomly.
 */
public final class Randomizer {
    private static final char [] digits = { '0','1','2','3','4','5','6','7','8','9' };

    // Allow this to be instantiated in parallel in multiple threads
    public Randomizer() {
    }

    public final double random() {
        final StringBuilder sb = new StringBuilder();
        sb.append(getRandomDigitString());
        sb.append(".");
        sb.append(getRandomDigitString());
        return Double.parseDouble(sb.toString());
    }

    private String getRandomDigitString() {
        final StringBuilder sb = new StringBuilder();
        int n = getRandomNumberOfDigits();
        for (int i=0; i<n; i++) {
            sb.append(getRandomDigit());
        }
        if (n==0) {
            sb.append("0");
        }
        return sb.toString();
    }

    private char getRandomDigit() {
        return digits[(int)(Math.random() * 10)];
    }

    private int getRandomNumberOfDigits() {
        return (int) ((Math.random() * 100) * Math.random());
    }
}
[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!