Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/objectstyle/ashwood/random/Roulette.java


1   /* ====================================================================
2    *
3    * Copyright(c) 2003, Andriy Shapochka
4    * All rights reserved.
5    *
6    * Redistribution and use in source and binary forms, with or without
7    * modification, are permitted provided that the following conditions
8    * are met:
9    *
10   * 1. Redistributions of source code must retain the above
11   *    copyright notice, this list of conditions and the following
12   *    disclaimer.
13   *
14   * 2. Redistributions in binary form must reproduce the above
15   *    copyright notice, this list of conditions and the following
16   *    disclaimer in the documentation and/or other materials
17   *    provided with the distribution.
18   *
19   * 3. Neither the name of the ASHWOOD nor the
20   *    names of its contributors may be used to endorse or
21   *    promote products derived from this software without
22   *    specific prior written permission.
23   *
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
25   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34   *
35   * ====================================================================
36   *
37   * This software consists of voluntary contributions made by
38   * individuals on behalf of the ASHWOOD Project and was originally
39   * created by Andriy Shapochka.
40   *
41   */
42  
43  package org.objectstyle.ashwood.random;
44  
45  import java.util.*;
46  
47  public class Roulette implements Iterator {
48    private Random random;
49    private int[] sectors;
50  
51    public Roulette(int sectorCount) {
52      this(sectorCount, 1, new Random());
53    }
54    public Roulette(int sectorCount, int sectorSelectionCount, Random randomizer) {
55      random = randomizer;
56      this.sectors = new int[sectorCount];
57      Arrays.fill(sectors, sectorSelectionCount);
58    }
59    public Roulette(int[] sectors, Random randomizer) {
60      random = randomizer;
61      this.sectors = new int[sectors.length];
62      System.arraycopy(sectors, 0, this.sectors, 0, sectors.length);
63    }
64    public boolean hasNext() {
65      for (int i = 0; i < sectors.length; i++) {
66        if (sectors[i] > 0) return true;
67      }
68      return false;
69    }
70    public Object next() {
71      int pointedSector = random.nextInt(sectors.length);
72      for (int i = pointedSector; i < sectors.length; i++) {
73        if (sectors[i]-- > 0) return new Integer(i);
74      }
75      for (int i = 0; i < pointedSector; i++) {
76        if (sectors[i]-- > 0) return new Integer(i);
77      }
78      return null;
79    }
80    public void remove() {
81      throw new java.lang.UnsupportedOperationException("Method remove() not supported.");
82    }
83  }