1package com.osroyale.util;
3import java.util.Arrays;
5import java.util.Random;
6import java.util.concurrent.ThreadLocalRandom;
45*
this class across multiple threads, this should only be instantiated locally
46 * unless certain that it will never be accessed by another thread.
47 * @author lare96 <http:
48 * @author Ryley Kimmel <ryley.kimmel@live.com>
50public final class RandomGen {
65 private final ThreadLocalRandom random = ThreadLocalRandom.current();
71 public ThreadLocalRandom
get() {
83 public int inclusive(
int min,
int max) {
87 return random.nextInt((max - min) + 1) + min;
97 public int inclusive(
int range) {
98 return inclusive(0, range);
111 public int inclusiveExcludes(
int min,
int max,
int... exclude) {
112 Arrays.sort(exclude);
114 int result = inclusive(min, max);
115 while(Arrays.binarySearch(exclude, result) >= 0) {
116 result = inclusive(min, max);
129 public float floatRandom(
float range) {
131 throw new IllegalArgumentException(
"range <= 0");
132 return random.nextFloat() * range;
140 public int randomIndex(Object[] array) {
141 return (
int) (random.nextDouble() * array.length);
149 public <T> T random(T[] array) {
150 return array[(int) (random.nextDouble() * array.length)];
158 public int random(
int[] array) {
159 return array[(int) (random.nextDouble() * array.length)];
167 public long random(
long[] array) {
168 return array[(int) (random.nextDouble() * array.length)];
176 public double random(
double[] array) {
177 return array[(int) (random.nextDouble() * array.length)];
185 public short random(
short[] array) {
186 return array[(int) (random.nextDouble() * array.length)];
194 public byte random(
byte[] array) {
195 return array[(int) (random.nextDouble() * array.length)];
203 public float random(
float[] array) {
204 return array[(int) (random.nextDouble() * array.length)];
212 public boolean random(
boolean[] array) {
213 return array[(int) (random.nextDouble() * array.length)];
221 public char random(
char[] array) {
222 return array[(int) (random.nextDouble() * array.length)];
230 public <T> T random(List<T> list) {
231 return list.get((
int) (random.nextDouble() * list.size()));
240 public <T> T[] shuffle(T[] array) {
241 for(
int i = array.length - 1; i > 0; i--) {
242 int index = random.nextInt(i + 1);
244 array[index] = array[i];
256 public int[] shuffle(
int[] array) {
257 for(
int i = array.length - 1; i > 0; i--) {
258 int index = random.nextInt(i + 1);
259 int a = array[index];
260 array[index] = array[i];
272 public long[] shuffle(
long[] array) {
273 for(
int i = array.length - 1; i > 0; i--) {
274 int index = random.nextInt(i + 1);
275 long a = array[index];
276 array[index] = array[i];
288 public double[] shuffle(
double[] array) {
289 for(
int i = array.length - 1; i > 0; i--) {
290 int index = random.nextInt(i + 1);
291 double a = array[index];
292 array[index] = array[i];
304 public short[] shuffle(
short[] array) {
305 for(
int i = array.length - 1; i > 0; i--) {
306 int index = random.nextInt(i + 1);
307 short a = array[index];
308 array[index] = array[i];
320 public byte[] shuffle(
byte[] array) {
321 for(
int i = array.length - 1; i > 0; i--) {
322 int index = random.nextInt(i + 1);
323 byte a = array[index];
324 array[index] = array[i];
336 public float[] shuffle(
float[] array) {
337 for(
int i = array.length - 1; i > 0; i--) {
338 int index = random.nextInt(i + 1);
339 float a = array[index];
340 array[index] = array[i];
352 public boolean[] shuffle(
boolean[] array) {
353 for(
int i = array.length - 1; i > 0; i--) {
354 int index = random.nextInt(i + 1);
355 boolean a = array[index];
356 array[index] = array[i];
367 public char[] shuffle(
char[] array) {
368 for(
int i = array.length - 1; i > 0; i--) {
369 int index = random.nextInt(i + 1);
370 char a = array[index];
371 array[index] = array[i];
383 public boolean success(
double value) {
384 return random.nextDouble() <= value;