001package bradleyross.library.helpers;
002import java.util.Random;
003/**
004 * A set of methods to provide assistance in generating random number patterns.
005 * 
006 * @author Bradley Ross
007 *
008 */
009public class RandomHelpers 
010{
011        /**
012         * Since all of the methods are static, the constructor
013         * should never be used.
014         */
015        protected RandomHelpers() { ; }
016        /**
017         * Controls amount of diagnostic listings.
018         * <p>Larger values result in more diagnostic
019         *    information being printed.</p>
020         * @see #setDebugLevel(int)
021         * @see #getDebugLevel()
022         */
023        protected static int debugLevel = 0;
024        /**
025         * Setter for debugLevel
026         * @param value Number to be used for debugLevel
027         * @see #setDebugLevel(int)
028         * @see #debugLevel
029         */
030        public void setDebugLevel(int value)
031        { debugLevel = value; }
032        /**
033         * Getter for debugLevel
034         * @return Value of debugLevel
035         * @see #debugLevel
036         */
037        public int getDebugLevel()
038        { return debugLevel; }
039        /** 
040         * Create an array with the integers from 0 to
041         * value-1 in a random order.
042         * 
043         * @param value Size of array to be produced
044         * @return Randomized array
045         */
046        public static int[] createRandomOrder (int value)
047        {
048                int working[] = new int[value];
049                boolean selected[] = new boolean[value];
050                int remaining = value;
051                for (int i = 0; i < value; i++)
052                { 
053                        selected[i] = false; 
054                        working[i] = -1;
055                }
056                Random generator = new Random();
057                for (int i = 0; i < value - 1; i++)
058                {
059                        int pos = generator.nextInt(remaining);
060                        for (int j = 0; j < value; j++)
061                        {
062                                if (selected[j]) {continue; }
063                                if (pos == 0)
064                                { 
065                                        working[i] = j;
066                                        selected[j] = true;
067                                        break;  
068                                }
069                                else 
070                                {
071                                        pos--;
072                                }
073                        }
074                        if (debugLevel > 0)
075                        {
076                                System.out.println("Value selected is " +
077                                                Integer.toString(working[i]));  
078                        }
079                        remaining--;
080                }
081                for (int k = 0; k < value; k++)
082                {
083                        if (!selected[k])
084                        { 
085                                working[value - 1] = k; 
086                                break;
087                        }
088                }
089                return working;
090        }
091        /**
092         * Test driver
093         * @param args Not used
094         */
095        public static void main(String args[])
096        {
097                for (int j = 0; j< 6; j++)
098                {
099                        int test[] = createRandomOrder(36);
100                        System.out.print("List: ");
101
102                        for (int i = 0; i < test.length; i++)
103                        {
104                                System.out.print(Integer.toString(test[i]) +
105                                " ");
106                        }
107                        System.out.println();
108                }
109        }
110}