refactored the methods so that the setters were throwing the exceptions and not the constructor, this makes sure that if later on for some reason someone attempts to set these member variables to illegal values, we will catch them