
// RandomInRange.java

// Written by: Nawapoom Lohajarernvanich, CoE Student ID: 4110181
// Revised by Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Objekt se inicializuje semínkem n.
   Při každém volání metody getNumber() bude vybráno náhodné číslo
   z intervalu 0 - (n-1).
   Toto číslo bude navíc vráceno pouze jednou.

   Semínko bude například 4, opakované volání metody getNumber() vrátí:
        2, 1, 3, 0
   nebo 1, 2, 3, 0
   nebo 3, 2, 0, 1  atd.

   Po vyčerpání všech čísel z intervalu vrací další volání metody getNumber()
   hodnotu -1.
*/

import java.util.Random;

public class RandomInRange 
{
  private boolean nums[];
  private int range;

  public RandomInRange(int n) 
  {
    range = n;
    nums = new boolean[range];
    for(int i=0; i<range; i++)
      nums[i] = true;
  } // konec konstruktoru: RandomInRange()


  public int getNumber()
  {
    int index = (int)Math.floor(Math.random()*range);
    for(int i=0; i<range; i++){
      if(nums[index]){
        nums[index] = false;
        return index;
      }
      index = (index+1)%range;
    }
    return -1;
  } // konec metody: getNumber()


  // --------------------- main() ---------------------------

  public static void main(String args[])
  {
    int num = 4; // výchozí
    try {
      num = Integer.parseInt(args[0]); 
    }
    catch (Exception ex){ 
      System.out.println("Použití: java RandomInRange <num>");
      System.out.println("Použíji num==4"); 
    } 

    RandomInRange rr = new RandomInRange(num);
    for(int i=0; i<num+5; i++)  // add a few extra tests
      System.out.println("Test " + i + ": " + rr.getNumber());
  } // konec metody: main()


} // konec třídy: RandomInRange class
