?????????

???????????2??jdk?????????????????????????л???????ó?????Ч?????????2?????????????????????????????α??????п?????3???????У??????????????????????????????????????????????jdk??nextInt(n)??????????????

???????2??????????

??????????jdk???0~N??N??????????????????????????2???????

????1??Math.random() ——????[0??1)?????С???????(int) ??n * Math.random()????????[0??n)???????

????2??java.util.Random??nextInt(n)???? ——????[0??n)?????С??

??????jdk1.6????У?Math.random()??????£?


    public static double random() {
        if (randomNumberGenerator == null) initRNG();   // randomNumberGenerator??Math?г??е?Random????
        return randomNumberGenerator.nextDouble();
    }


????randomNumberGenerator ???Math.random()???????Random???????????????ɡ?

?????????????Random???nextDouble()??nextInt(n)??????????


    public double nextDouble() {
        return (((long)(next(26)) << 27) + next(27))
     / (double)(1L << 53);
    }

 

    public int nextInt(int n) {
        if (n <= 0)
            throw new IllegalArgumentException("n must be positive");

        if ((n & -n) == n)  // i.e.?? n is a power of 2
            return (int)((n * (long)next(31)) >> 31);

        int bits?? val;
        do {
            bits = next(31);
            val = bits % n;
        } while (bits - val + (n-1) < 0);   // ????????????ж????????a
        return val;
    }
 


??????2?γ????п?????????????????????????????????next(n)??

?????????next(n)??????????nλbits?????bitλ????0??1????n<32???next(n)?????????????Χ?0~2^31-1????n=32??????????????Χ?-2??31?η?~2^31-1??????е?next?????????return (int)(nextseed >>> (48 - bits)) ??????????????48λ???????????????????????nλbit??

??????nextDouble()????????????2??next(n)????nextInt(n)????????????????next(n)???????2?????£??????b???????????nextInt(n)??nextDouble()??????????Ч??????

???????????(int) ??n * Math.random()????????????????????????double?????????????????????nextInt(n)????????Щ??

????????????????????????