Continued...
Code
import java.io.*;
import java.util.Scanner;
public abstract class NumberReaderBase implements INumberReader
{
private Scanner in;
private PrintStream out;
private int maximumNumber, minimumNumber, amountOfNumbers;
public NumberReaderBase(INumberReaderConfig config)
{
readConfig(config);
}
private void readConfig(INumberReaderConfig config)
{
in = new Scanner(config.getInputer());
out = config.getPrinter();
maximumNumber = config.getMaximumNumber();
minimumNumber = config.getMinimumNumber();
amountOfNumbers = config.getAmountOfNumbers();
}
protected int getMaximumNumber() { return maximumNumber; }
protected int getMinimumNumber() { return minimumNumber; }
protected int getAmountOfNumbers() { return amountOfNumbers; }
protected int readNumber()
{
String msg = String.format("Input a number between %d and %d: ", minimumNumber, maximumNumber);
int number = 0;
do
{
out.println(msg);
number = in.nextInt();
} while(!isValidNumber(number));
return number;
}
protected boolean isValidNumber(int number)
{
return number >= minimumNumber && number <= maximumNumber;
}
protected void printLine(String line)
{
out.println(line);
}
}
Code
public class UniqueNumberReader extends NumberReaderBase
{
private int[] uniqueNumbers;
private int numUniqueNumbers;
public UniqueNumberReader(INumberReaderConfig config)
{
super(config);
}
public void readNumbers()
{
int capacity = getAmountOfNumbers();
uniqueNumbers = new int[capacity];
while(capacity-- > 0)
readUniqueNumber();
}
private boolean isUniqueNumber(int number)
{
for(int i = 0; i < numUniqueNumbers; i++)
if(uniqueNumbers[i] == number)
return false;
return true;
}
protected void readUniqueNumber()
{
int number = readNumber();
if(isUniqueNumber(number))
storeUniqueNumber(number);
}
protected int[] getUniqueNumbers()
{
int[] uniques = new int[numUniqueNumbers];
for(int i = 0; i < uniques.length; i++)
uniques[i] = uniqueNumbers[i];
return uniques;
}
protected void storeUniqueNumber(int number)
{
uniqueNumbers[numUniqueNumbers++] = number;
}
}
Code
public class VerboseUniqueNumberReader extends UniqueNumberReader
{
public VerboseUniqueNumberReader(INumberReaderConfig config)
{
super(config);
}
protected void readUniqueNumber()
{
super.readUniqueNumber();
printUniqueNumbers();
}
protected void storeUniqueNumber(int number)
{
super.storeUniqueNumber(number);
printUniqueNumber(number);
}
private void printUniqueNumbers()
{
int[] uniques = getUniqueNumbers();
String uniqueList = new String("Unique List:");
for(int i = 0; i < uniques.length; i++)
uniqueList = String.format("%s %s",uniqueList,String.valueOf(uniques[i]));
printLine(uniqueList);
}
private void printUniqueNumber(int number)
{
String unique = new String("Unique Number:");
unique = String.format("%s %s",unique, number);
printLine(unique);
}
}
Code
public class UniqueNumberReaderFactory implements INumberReaderFactory
{
public INumberReader createNumberReader(INumberReaderConfig config)
{
return new UniqueNumberReader(config);
}
}
Code
public class VerboseUniqueNumberReaderFactory extends UniqueNumberReaderFactory
{
public INumberReader createNumberReader(INumberReaderConfig config)
{
return new VerboseUniqueNumberReader(config);
}
}