/* * JASA Java Auction Simulator API * Copyright (C) 2013 Steve Phelps * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package net.sourceforge.jabm.util; import java.io.Serializable; import java.util.Iterator; /** * <p> * An iterator that enumerates the base N representation of every non-negative * integer that can be represented within the specified number of digits. * </p> * * @author Steve Phelps * @version $Revision: 104 $ */ public class BaseNIterator implements Iterator<int[]>, Serializable { protected int currentNumber = 0; protected int base; protected int numDigits; protected int maximumNumber; public BaseNIterator(int base, int numDigits) { this.base = base; this.numDigits = numDigits; maximumNumber = ((int) Math.pow(base, numDigits)) - 1; } public int[] next() { int[] digits = convert(); currentNumber++; return digits; } public boolean hasNext() { return currentNumber <= maximumNumber; } public void remove() { throw new UnsupportedOperationException(); } protected int[] convert() { int n = currentNumber; int[] digits = new int[numDigits]; for (int i = 0; i < numDigits; i++) { digits[i] = n % base; n /= base; } return digits; } }