/*
 * Created on Dec 18, 2003
 */
package lotto;

import java.util.*;

/**
 * @author oliver (boehm@javatux.de)
 */
public class Trommel {
    
    private Vector balls = null;

    Trommel() {
        init();
    }

    private void init() {
        balls = new Vector(49);
        for (int i = 1; i <= 49; i++) {
            balls.add(new Integer(i));
        }
    }
    
    /**
     * Der Mischvorgang laueft so ab, dass eine beliebige Kugel gezogen wird
     * und am Ende wieder eingefuegt wird.
     */
    public void mixNumbers() {
        mixNumbers(50, 100);
    }
    
    /**
     * mische...mische...mische...
     * @param n wie oft gemischt wird
     */
    public void mixNumbers(int n) {
        for (int i = 0; i < n; i++) {
            Integer ballnumber = this.getNumber();
            balls.add(ballnumber);
        }
    }
    
    /**
     * mische...mische...mische...
     * @param min wie oft mindestens gemischt wird
     * @param max wie oft maximal gemischt wird
     */
    public void mixNumbers(int min, int max) {
        mixNumbers(min, max, new Random(System.currentTimeMillis()));
    }
    
    public void mixNumbers(int min, int max, Random random) {
        mixNumbers(min + random.nextInt(max - min));
    }
    
    /**
     * using bubble sort.
     */
    public void sort() {
        boolean unsorted = true;
        while (unsorted) {
            unsorted = false;
            for (int i = 1; i < balls.size(); i++) {
                Integer min = (Integer) balls.get(i-1);
                Integer max = (Integer) balls.get(i);
                if (min.compareTo(max) > 0) {
                    balls.set(i-1, max);
                    balls.set(i, min);
                    unsorted = true;
                }
            }
        }
    }
    
    /**
     * ...und hier die Ziehung der Lottozahlen.
     * @return
     */
    public Integer getNumber() {
        Random random = new Random(System.currentTimeMillis());
        int n = random.nextInt(balls.size());
        return (Integer) balls.remove(n);
    }
    
    public String toString() {
        String s = "";
        for (int i = 1; i < balls.size(); i++) {
            s += " " + balls.get(i);
        }
        return balls.firstElement().toString() + s;
    }

    public static void main(String[] args) {
        System.out.print("Ziehung:");
        Trommel trommel = new Trommel();
        for (int i = 0; i < 6; i++) {
            trommel.mixNumbers();
            System.out.print(" " + trommel.getNumber());
        }
        System.out.println();
    }
}
