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

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