lots of exercises in java... from https://github.com/exercism/java

example.java 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. public class SpaceAge {
  2. private enum Planet {
  3. EARTH, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS, NEPTUNE
  4. }
  5. private double seconds;
  6. private static final double EARTH_ORBITAL_PERIOD_IN_SECONDS = 31557600.0;
  7. private static final int PRECISION = 2;
  8. private static final Map<Planet, Double> relativeOrbitalPeriods = new HashMap<>();
  9. static {
  10. relativeOrbitalPeriods.put(Planet.EARTH, 1.0);
  11. relativeOrbitalPeriods.put(Planet.MERCURY, 0.2408467);
  12. relativeOrbitalPeriods.put(Planet.VENUS, 0.61519726);
  13. relativeOrbitalPeriods.put(Planet.MARS, 1.8808158);
  14. relativeOrbitalPeriods.put(Planet.JUPITER, 11.862615);
  15. relativeOrbitalPeriods.put(Planet.SATURN, 29.447498);
  16. relativeOrbitalPeriods.put(Planet.URANUS, 84.016846);
  17. relativeOrbitalPeriods.put(Planet.NEPTUNE, 164.79132);
  18. }
  19. public SpaceAge(double seconds) {
  20. this.seconds = seconds;
  21. }
  22. public double getSeconds() {
  23. return seconds;
  24. }
  25. public double onEarth() {
  26. return calculateAge(relativeOrbitalPeriods.get(Planet.EARTH));
  27. }
  28. public double onMercury() {
  29. return calculateAge(relativeOrbitalPeriods.get(Planet.MERCURY));
  30. }
  31. public double onVenus() {
  32. return calculateAge(relativeOrbitalPeriods.get(Planet.VENUS));
  33. }
  34. public double onMars() {
  35. return calculateAge(relativeOrbitalPeriods.get(Planet.MARS));
  36. }
  37. public double onJupiter() {
  38. return calculateAge(relativeOrbitalPeriods.get(Planet.JUPITER));
  39. }
  40. public double onSaturn() {
  41. return calculateAge(relativeOrbitalPeriods.get(Planet.SATURN));
  42. }
  43. public double onUranus() {
  44. return calculateAge(relativeOrbitalPeriods.get(Planet.URANUS));
  45. }
  46. public double onNeptune() {
  47. return calculateAge(relativeOrbitalPeriods.get(Planet.NEPTUNE));
  48. }
  49. private double calculateAge(double relativeOrbitalPeriod) {
  50. double age = seconds / (EARTH_ORBITAL_PERIOD_IN_SECONDS * relativeOrbitalPeriod);
  51. return new BigDecimal(age).setScale(PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
  52. }
  53. }