まずは簡単なコードから。
enum Fruit{
APPLE, ORANGE, BANANA, MANGO
}
Fruite.each(){
println it
}
これの出力結果は次のとおりです。
APPLE
ORANGE
BANANA
MANGO
つぎは、『Effective Java』の項目30「int定数の代わりにenumを使用する」から写経してみました。
enum Planet{
MERCURY(3.302e+23, 2.439e6),
VENUS (4.869e+24, 6.052e6),
EARTH (5.975e+24, 6.378e6),
MARS (6.419e+23, 3.393e6),
JUPITER(1.899e+27, 7.149e7),
SATURN (5.685e+26, 6.027e7),
URANUS (8.683e+25, 2.556e7),
NEPTUNE(1.024e+26, 2.477e7);
private final double mass; // kg
private final double radius; // metre
private final double surfaceGravity; // m / s*s
// Gravitational Constant
private static final double G = 6.67300E-11
// Constructor
Planet(double mass, double radius){
this.mass = mass
this.radius = radius
surfaceGravity = G * mass / (radius * radius)
}
public double surfaceWeight(double mass){
mass * surfaceGravity
}
}
Planet.each(){
println "${it.toString()}"
println "mass -> ${it.mass}"
println "radius -> ${it.radius}"
println "surfaceGrabity -> ${it.surfaceGravity}"
print "surfaceWeight -> "
println "${it.surfaceWeight(20.0 / Planet.EARTH.surfaceGravity)}"
println ""
}
println 20.0 / Planet.EARTH.surfaceGravity
私、これ書いていて気付いたんですけど、enumってコンストラクター持てるんですね。
実行結果は以下のとおりです。
MERCURY
mass -> 3.302E23
radius -> 2439000.0
surfaceGrabity -> 0.0
surfaceWeight -> NaN
VENUS
mass -> 4.869E24
radius -> 6052000.0
surfaceGrabity -> 0.0
surfaceWeight -> NaN
EARTH
mass -> 5.975E24
radius -> 6378000.0
surfaceGrabity -> 0.0
surfaceWeight -> NaN
MARS
mass -> 6.419E23
radius -> 3393000.0
surfaceGrabity -> 0.0
surfaceWeight -> NaN
JUPITER
mass -> 1.899E27
radius -> 7.149E7
surfaceGrabity -> 0.0
surfaceWeight -> NaN
SATURN
mass -> 5.685E26
radius -> 6.027E7
surfaceGrabity -> 0.0
surfaceWeight -> NaN
URANUS
mass -> 8.683E25
radius -> 2.556E7
surfaceGrabity -> 0.0
surfaceWeight -> NaN
NEPTUNE
mass -> 1.0239999999999999E26
radius -> 2.477E7
surfaceGrabity -> 0.0
surfaceWeight -> NaN
Infinity
どうも、surfaceWeightの値がNaNになるので、調べてみたら、
20 / Planet.EARTH.surfaceGravity
が無限だったようで、そりゃNaNになるわな。
0 件のコメント:
コメントを投稿