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}