April 20, 201510 yr This function returns a random number with minimum min and maximum max with normal distribution. More info here public static int rand(int min, int max) { int n; int mean = (min + max) / 2; int std = (max - mean) / 3; Random r = new Random(); do { double val = r.nextGaussian() * std + mean; n = (int) Math.round(val); } while (n < min || n > max); return n; } Edited April 20, 201510 yr by SESH
April 23, 201510 yr I love this, I've been planning on writing this. Glad I found your thread man, well done
April 29, 201510 yr Not all that great, since that while loop can potentially block forever... private final Random random = new Random(); public int exclusive(int min, int max) { if (max <= min) { max = min + 1; } return random.nextInt((max - min)) + min; } public int exclusive(int range) { return exclusive(0, range); } public int inclusive(int min, int max) { if (max < min) { max = min + 1; } return exclusive((max - min) + 1) + min; } public int inclusive(int range) { return inclusive(0, range); }
April 29, 201510 yr Not all that great, since that while loop can potentially block forever... private final Random random = new Random(); public int exclusive(int min, int max) { if (max <= min) { max = min + 1; } return random.nextInt((max - min)) + min; } public int exclusive(int range) { return exclusive(0, range); } public int inclusive(int min, int max) { if (max < min) { max = min + 1; } return exclusive((max - min) + 1) + min; } public int inclusive(int range) { return inclusive(0, range); } Well what you did there is too complicated, what you can do is this: static Random r = new Random(); public static int rand (int mean, int stdDev){ return (int) (r.nextGaussian()*stdDev+mean); }
April 29, 201510 yr Well what you did there is too complicated, what you can do is this: static Random r = new Random(); public static int rand (int mean, int stdDev){ return (int) (r.nextGaussian()*stdDev+mean); } How is what I did complicated? I gave methods that support both inclusive and exclusive intervals.
May 3, 201510 yr Author Not all that great, since that while loop can potentially block forever... private final Random random = new Random(); public int exclusive(int min, int max) { if (max <= min) { max = min + 1; } return random.nextInt((max - min)) + min; } public int exclusive(int range) { return exclusive(0, range); } public int inclusive(int min, int max) { if (max < min) { max = min + 1; } return exclusive((max - min) + 1) + min; } public int inclusive(int range) { return inclusive(0, range); } It would be incredibly, incredibly unlikely for it to even run through the while loop twice. Edited May 3, 201510 yr by SESH
Create an account or sign in to comment