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

SpaceAge.java 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import java.math.BigDecimal;
  2. public 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. public 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. public SpaceAge(double seconds) {
  24. this.seconds = seconds;
  25. }
  26. public double getSeconds() {
  27. return seconds;
  28. }
  29. public double onEarth() {
  30. return calculateAge(Planet.EARTH);
  31. }
  32. public double onMercury() {
  33. return calculateAge(Planet.MERCURY);
  34. }
  35. public double onVenus() {
  36. return calculateAge(Planet.VENUS);
  37. }
  38. public double onMars() {
  39. return calculateAge(Planet.MARS);
  40. }
  41. public double onJupiter() {
  42. return calculateAge(Planet.JUPITER);
  43. }
  44. public double onSaturn() {
  45. return calculateAge(Planet.SATURN);
  46. }
  47. public double onUranus() {
  48. return calculateAge(Planet.URANUS);
  49. }
  50. public 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. }