Kaynağa Gözat

Merged planet Enum and HashMap (closes #39)

Piet van Dongen 11 yıl önce
ebeveyn
işleme
6ab8fc0aac
1 değiştirilmiş dosya ile 32 ekleme ve 25 silme
  1. 32
    25
      space-age/example.java

+ 32
- 25
space-age/example.java Dosyayı Görüntüle

@@ -1,25 +1,32 @@
1
+import java.math.BigDecimal;
2
+
1 3
 public class SpaceAge {
2 4
 
3 5
     private enum Planet {
4
-        EARTH, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS, NEPTUNE
6
+        EARTH(1.0),
7
+        MERCURY(0.2408467),
8
+        VENUS(0.61519726),
9
+        MARS(1.8808158),
10
+        JUPITER(11.862615),
11
+        SATURN(29.447498),
12
+        URANUS(84.016846),
13
+        NEPTUNE(164.79132);
14
+
15
+        private final double relativeOrbitalPeriod;
16
+
17
+        Planet(double relativeOrbitalPeriod) {
18
+            this.relativeOrbitalPeriod = relativeOrbitalPeriod;
19
+        }
20
+
21
+        public double getRelativeOrbitalPeriod() {
22
+            return relativeOrbitalPeriod;
23
+        }
5 24
     }
6 25
 
7
-    private double seconds;
8
-
9 26
     private static final double EARTH_ORBITAL_PERIOD_IN_SECONDS = 31557600.0;
10 27
     private static final int PRECISION = 2;
11
-    private static final Map<Planet, Double> relativeOrbitalPeriods = new HashMap<>();
12
-
13
-    static {
14
-        relativeOrbitalPeriods.put(Planet.EARTH, 1.0);
15
-        relativeOrbitalPeriods.put(Planet.MERCURY, 0.2408467);
16
-        relativeOrbitalPeriods.put(Planet.VENUS, 0.61519726);
17
-        relativeOrbitalPeriods.put(Planet.MARS, 1.8808158);
18
-        relativeOrbitalPeriods.put(Planet.JUPITER, 11.862615);
19
-        relativeOrbitalPeriods.put(Planet.SATURN, 29.447498);
20
-        relativeOrbitalPeriods.put(Planet.URANUS, 84.016846);
21
-        relativeOrbitalPeriods.put(Planet.NEPTUNE, 164.79132);
22
-    }
28
+
29
+    private double seconds;
23 30
 
24 31
     public SpaceAge(double seconds) {
25 32
         this.seconds = seconds;
@@ -30,39 +37,39 @@ public class SpaceAge {
30 37
     }
31 38
 
32 39
     public double onEarth() {
33
-        return calculateAge(relativeOrbitalPeriods.get(Planet.EARTH));
40
+        return calculateAge(Planet.EARTH);
34 41
     }
35 42
 
36 43
     public double onMercury() {
37
-        return calculateAge(relativeOrbitalPeriods.get(Planet.MERCURY));
44
+        return calculateAge(Planet.MERCURY);
38 45
     }
39 46
 
40 47
     public double onVenus() {
41
-        return calculateAge(relativeOrbitalPeriods.get(Planet.VENUS));
48
+        return calculateAge(Planet.VENUS);
42 49
     }
43 50
 
44 51
     public double onMars() {
45
-        return calculateAge(relativeOrbitalPeriods.get(Planet.MARS));
52
+        return calculateAge(Planet.MARS);
46 53
     }
47 54
 
48 55
     public double onJupiter() {
49
-        return calculateAge(relativeOrbitalPeriods.get(Planet.JUPITER));
56
+        return calculateAge(Planet.JUPITER);
50 57
     }
51 58
 
52 59
     public double onSaturn() {
53
-        return calculateAge(relativeOrbitalPeriods.get(Planet.SATURN));
60
+        return calculateAge(Planet.SATURN);
54 61
     }
55 62
 
56 63
     public double onUranus() {
57
-        return calculateAge(relativeOrbitalPeriods.get(Planet.URANUS));
64
+        return calculateAge(Planet.URANUS);
58 65
     }
59 66
 
60 67
     public double onNeptune() {
61
-        return calculateAge(relativeOrbitalPeriods.get(Planet.NEPTUNE));
68
+        return calculateAge(Planet.NEPTUNE);
62 69
     }
63 70
 
64
-    private double calculateAge(double relativeOrbitalPeriod) {
65
-        double age = seconds / (EARTH_ORBITAL_PERIOD_IN_SECONDS * relativeOrbitalPeriod);
71
+    private double calculateAge(Planet planet) {
72
+        double age = seconds / (EARTH_ORBITAL_PERIOD_IN_SECONDS * planet.getRelativeOrbitalPeriod());
66 73
 
67 74
         return new BigDecimal(age).setScale(PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
68 75
     }