import java.util.Random; /** * A random number generator that returns a number within the specified bound * and of alternating parity. The number returned from the first call is even, * then odd, then even and so on. * * @correspondence numCalls = |history| * @author paolo */ public class UnfilteredRandom implements RandomWithParity { /** * Number of times the generateNumber method has been called. */ private int numCalls; /** * Generates a stream of random numbers. */ private Random generator; /** * Initially, no calls have been made. */ UnfilteredRandom() { this.numCalls = 0; this.generator = new Random(); } /** * Generates a random number in the specified interval. * * @see RandomWithParity#generateNumber(int) */ public int generateNumber(int upperBound) { int randomNumber; do { randomNumber = this.generator.nextInt(upperBound + 1); } while (randomNumber % 2 != this.numCalls % 2); this.numCalls++; return randomNumber; } }