Просмотр исходного кода

Merged planet Enum and HashMap (closes #39)

Piet van Dongen 11 лет назад
Родитель
Сommit
6ab8fc0aac
1 измененных файлов: 32 добавлений и 25 удалений
  1. 32
    25
      space-age/example.java

+ 32
- 25
space-age/example.java Просмотреть файл

1
+import java.math.BigDecimal;
2
+
1
 public class SpaceAge {
3
 public class SpaceAge {
2
 
4
 
3
     private enum Planet {
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
     private static final double EARTH_ORBITAL_PERIOD_IN_SECONDS = 31557600.0;
26
     private static final double EARTH_ORBITAL_PERIOD_IN_SECONDS = 31557600.0;
10
     private static final int PRECISION = 2;
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
     public SpaceAge(double seconds) {
31
     public SpaceAge(double seconds) {
25
         this.seconds = seconds;
32
         this.seconds = seconds;
30
     }
37
     }
31
 
38
 
32
     public double onEarth() {
39
     public double onEarth() {
33
-        return calculateAge(relativeOrbitalPeriods.get(Planet.EARTH));
40
+        return calculateAge(Planet.EARTH);
34
     }
41
     }
35
 
42
 
36
     public double onMercury() {
43
     public double onMercury() {
37
-        return calculateAge(relativeOrbitalPeriods.get(Planet.MERCURY));
44
+        return calculateAge(Planet.MERCURY);
38
     }
45
     }
39
 
46
 
40
     public double onVenus() {
47
     public double onVenus() {
41
-        return calculateAge(relativeOrbitalPeriods.get(Planet.VENUS));
48
+        return calculateAge(Planet.VENUS);
42
     }
49
     }
43
 
50
 
44
     public double onMars() {
51
     public double onMars() {
45
-        return calculateAge(relativeOrbitalPeriods.get(Planet.MARS));
52
+        return calculateAge(Planet.MARS);
46
     }
53
     }
47
 
54
 
48
     public double onJupiter() {
55
     public double onJupiter() {
49
-        return calculateAge(relativeOrbitalPeriods.get(Planet.JUPITER));
56
+        return calculateAge(Planet.JUPITER);
50
     }
57
     }
51
 
58
 
52
     public double onSaturn() {
59
     public double onSaturn() {
53
-        return calculateAge(relativeOrbitalPeriods.get(Planet.SATURN));
60
+        return calculateAge(Planet.SATURN);
54
     }
61
     }
55
 
62
 
56
     public double onUranus() {
63
     public double onUranus() {
57
-        return calculateAge(relativeOrbitalPeriods.get(Planet.URANUS));
64
+        return calculateAge(Planet.URANUS);
58
     }
65
     }
59
 
66
 
60
     public double onNeptune() {
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
         return new BigDecimal(age).setScale(PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
74
         return new BigDecimal(age).setScale(PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
68
     }
75
     }