int max = 10;
int min = 5;
java.util.Ramdom rand = new java.util.Random(System.currentTimeMillis()):
int result = min + rand.nextInt(max - min);
以上代码产生5~10的整数.
如果要自已写Random类,可以参考java.util.Random的源代码

解决方案 »

  1.   

    楼上的说对了,就是要写Random类,因为jdk1.2以前的版本里面是没有Random.next(int)方法的,我要自己写一个算法来产生0-100范围内的随机数。
      

  2.   

    以下在JDK1.3.1_01中Radom类的源码(已删除注释):package java.util;
    public class Random implements java.io.Serializable {
        static final long serialVersionUID = 3905348978240129619L;
        private long seed;
        private final static long multiplier = 0x5DEECE66DL;
        private final static long addend = 0xBL;
        private final static long mask = (1L << 48) - 1;
        public Random() { this(System.currentTimeMillis()); }
        public Random(long seed) {
            setSeed(seed);
        }    synchronized public void setSeed(long seed) {
            this.seed = (seed ^ multiplier) & mask;
         haveNextNextGaussian = false;
        }    synchronized protected int next(int bits) {
            long nextseed = (seed * multiplier + addend) & mask;
            seed = nextseed;
            return (int)(nextseed >>> (48 - bits));
        }    private static final int BITS_PER_BYTE = 8;
        private static final int BYTES_PER_INT = 4;    public void nextBytes(byte[] bytes) {
    int numRequested = bytes.length; int numGot = 0, rnd = 0; while (true) {
        for (int i = 0; i < BYTES_PER_INT; i++) {
    if (numGot == numRequested)
        return; rnd = (i==0 ? next(BITS_PER_BYTE * BYTES_PER_INT)
                : rnd >> BITS_PER_BYTE);
    bytes[numGot++] = (byte)rnd;
        }
    }
        }    public int nextInt() {  return next(32); }    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);
            return val;
        }    public long nextLong() {
            return ((long)(next(32)) << 32) + next(32);
        }    public boolean nextBoolean() {return next(1) != 0;}    public float nextFloat() {
            int i = next(24);
            return i / ((float)(1 << 24));
        }    public double nextDouble() {
            long l = ((long)(next(26)) << 27) + next(27);
            return l / (double)(1L << 53);
        }    private double nextNextGaussian;
        private boolean haveNextNextGaussian = false;    synchronized public double nextGaussian() {
            if (haveNextNextGaussian) {
             haveNextNextGaussian = false;
             return nextNextGaussian;
         } else {
                double v1, v2, s;
             do { 
                    v1 = 2 * nextDouble() - 1; // between -1 and 1
                 v2 = 2 * nextDouble() - 1; // between -1 and 1 
                    s = v1 * v1 + v2 * v2;
             } while (s >= 1 || s == 0);
             double multiplier = Math.sqrt(-2 * Math.log(s)/s);
             nextNextGaussian = v2 * multiplier;
             haveNextNextGaussian = true;
             return v1 * multiplier;
            }
        }
    }     
      

  3.   

    以下是JDK1.3.1_01中Random类的源代码(删除了注释):package java.util;
    public class Random implements java.io.Serializable {
        static final long serialVersionUID = 3905348978240129619L;
        private long seed;
        private final static long multiplier = 0x5DEECE66DL;
        private final static long addend = 0xBL;
        private final static long mask = (1L << 48) - 1;
        public Random() { this(System.currentTimeMillis()); }
        public Random(long seed) {
            setSeed(seed);
        }    synchronized public void setSeed(long seed) {
            this.seed = (seed ^ multiplier) & mask;
         haveNextNextGaussian = false;
        }    synchronized protected int next(int bits) {
            long nextseed = (seed * multiplier + addend) & mask;
            seed = nextseed;
            return (int)(nextseed >>> (48 - bits));
        }    private static final int BITS_PER_BYTE = 8;
        private static final int BYTES_PER_INT = 4;    public void nextBytes(byte[] bytes) {
    int numRequested = bytes.length; int numGot = 0, rnd = 0; while (true) {
        for (int i = 0; i < BYTES_PER_INT; i++) {
    if (numGot == numRequested)
        return; rnd = (i==0 ? next(BITS_PER_BYTE * BYTES_PER_INT)
                : rnd >> BITS_PER_BYTE);
    bytes[numGot++] = (byte)rnd;
        }
    }
        }    public int nextInt() {  return next(32); }    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);
            return val;
        }    public long nextLong() {
            return ((long)(next(32)) << 32) + next(32);
        }    public boolean nextBoolean() {return next(1) != 0;}    public float nextFloat() {
            int i = next(24);
            return i / ((float)(1 << 24));
        }    public double nextDouble() {
            long l = ((long)(next(26)) << 27) + next(27);
            return l / (double)(1L << 53);
        }    private double nextNextGaussian;
        private boolean haveNextNextGaussian = false;    synchronized public double nextGaussian() {
            if (haveNextNextGaussian) {
             haveNextNextGaussian = false;
             return nextNextGaussian;
         } else {
                double v1, v2, s;
             do { 
                    v1 = 2 * nextDouble() - 1; // between -1 and 1
                 v2 = 2 * nextDouble() - 1; // between -1 and 1 
                    s = v1 * v1 + v2 * v2;
             } while (s >= 1 || s == 0);
             double multiplier = Math.sqrt(-2 * Math.log(s)/s);
             nextNextGaussian = v2 * multiplier;
             haveNextNextGaussian = true;
             return v1 * multiplier;
            }
        }
    }