View Javadoc

    1   package baseCode.math;
    2
    3   import java.util.Random;
    4
    5   /***
    6    * Fill arrays with random values given a source of values.
    7    * <p>
    8    * Copyright (c) 2004
    9    * </p>
    10   * <p>
    11   * Institution: Columbia University
    12   * </p>
    13   *
    14   * @author Paul Pavlidis
    15   * @version $Id: RandomChooser.java,v 1.8 2005/03/21 18:01:04 pavlidis Exp $
    16   */
    17  public class RandomChooser {
    18
    19     private RandomChooser() { /* block instantiation */
    20     }
    21
    22     private static Random generator = new Random( System.currentTimeMillis() );
    23
    24     /***
    25      * Initialized the random number generator witha  given seed.
    26      * @param seed
    27      */
    28     public static void init(long seed) {
    29        generator = new Random(seed);
    30     }
    31
    32     /***
    33      * Fill randomvals with random things from sourcedata, without replacement.
    34      *
    35      * @param randomvals answers go here.
    36      * @param sourcedata Data to be randomly selected
    37      * @param deck an array pre-filled with integers from 0 to max, but they don't have to be in order.
    38      * @param max how many values we need.
    39      * @param n int
    40      */
    41     public static void chooserandom( double[] randomvals, double[] sourcedata,
    42           int[] deck, int max, int n ) {
    43        int rand;
    44        int i;
    45        int temp;
    46        for ( i = 0; i < n; i++ ) {
    47           rand = generator.nextInt( max - i ) + i; // a value between i and max.
    48           temp = deck[rand];
    49           deck[rand] = deck[i];
    50           deck[i] = temp;
    51           randomvals[i] = sourcedata[temp];
    52        }
    53     }
    54
    55     /***
    56      * choose n random integers from 0 to max without repeating
    57      *
    58      * @param randomnums answers go here.
    59      * @param deck an array pre-filled with integers from 0 to max, but they don't have to be in order.
    60      * @param max how many values we need.
    61      * @param n int
    62      */
    63     public static void chooserandom( int[] randomnums, int[] deck, int max, int n ) {
    64        int rand;
    65        int i;
    66        for ( i = 0; i < n; i++ ) {
    67           rand = generator.nextInt( max - i ) + i; // a value between i and max.
    68           randomnums[i] = deck[rand];
    69           deck[rand] = deck[i];
    70           deck[i] = randomnums[i];
    71        }
    72     }
    73
    74     /***
    75      * choose n random integers from 0 to max without repeating
    76      *
    77      * @param randomnums int[]
    78      * @param recLog record of what values are already chosen.
    79      * @param max int
    80      * @param n int
    81      */
    82     public static void chooserandom( int[] randomnums, boolean[] recLog,
    83           int max, int n ) {
    84        int numgot;
    85        int i;
    86        int newnum;
    87
    88        numgot = 0;
    89
    90        while ( numgot < n ) { /* numgot is the index of the last gotten item */
    91           newnum = generator.nextInt( max );
    92           if ( !recLog[newnum] ) {
    93              randomnums[numgot] = newnum;
    94              recLog[newnum] = true;
    95              numgot++;
    96           }
    97        }
    98
    99        // reset all elements in recLog to false
    100       for ( i = 0; i < n; i++ ) {
    101          recLog[randomnums[i]] = false;
    102       }
    103
    104    }
    105
    106    /***
    107     * Same as chooserandom, but with replacement -- that is, repeats are allowed.
    108     *
    109     * @param randomnums int[]
    110     * @param max int
    111     * @param n int
    112     */
    113    public static void chooserandomWrep( int[] randomnums, int max, int n ) {
    114       for ( int i = 0; i < n; i++ ) {
    115          int newnum = ( char ) ( generator.nextInt() % max );
    116          randomnums[i] = newnum;
    117       }
    118    }
    119
    120 }