import java.math.BigDecimal; class SpaceAge { private enum Planet { EARTH(1.0), MERCURY(0.2408467), VENUS(0.61519726), MARS(1.8808158), JUPITER(11.862615), SATURN(29.447498), URANUS(84.016846), NEPTUNE(164.79132); private final double relativeOrbitalPeriod; Planet(double relativeOrbitalPeriod) { this.relativeOrbitalPeriod = relativeOrbitalPeriod; } private double getRelativeOrbitalPeriod() { return relativeOrbitalPeriod; } } private static final double EARTH_ORBITAL_PERIOD_IN_SECONDS = 31557600.0; private static final int PRECISION = 2; private double seconds; SpaceAge(double seconds) { this.seconds = seconds; } double getSeconds() { return seconds; } double onEarth() { return calculateAge(Planet.EARTH); } double onMercury() { return calculateAge(Planet.MERCURY); } double onVenus() { return calculateAge(Planet.VENUS); } double onMars() { return calculateAge(Planet.MARS); } double onJupiter() { return calculateAge(Planet.JUPITER); } double onSaturn() { return calculateAge(Planet.SATURN); } double onUranus() { return calculateAge(Planet.URANUS); } double onNeptune() { return calculateAge(Planet.NEPTUNE); } private double calculateAge(Planet planet) { double age = seconds / (EARTH_ORBITAL_PERIOD_IN_SECONDS * planet.getRelativeOrbitalPeriod()); return new BigDecimal(age).setScale(PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue(); } }