Exemplos de Enumerações (Java): Difference between revisions
From Wiki**3
No edit summary |
|||
| (20 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{TOCright}} | {{TOCright}} | ||
<!-- exemplos da aula 14 --> | |||
== Estações == | == Estações == | ||
Este exemplo mostra um tipo enumerado na sua versão mais simples, i.e., apenas se indicam os elementos que constituem a enumeração. | |||
<java5> | |||
public enum Estação { | |||
PRIMAVERA, VERÃO, OUTONO, INVERNO | |||
} | |||
</java5> | |||
== Planetas == | == Planetas: 1ª versão == | ||
Exemplo adaptado do manual de Java 1.5 da [http://www.sun.com/ Sun Microsystems, Inc.] [http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html] | |||
<java5> | |||
public enum Planeta { | |||
MERCÚRIO (3.303e+23, 2.4397e6), | |||
VÉNUS (4.869e+24, 6.0518e6), | |||
TERRA (5.976e+24, 6.37814e6), | |||
MARTE (6.421e+23, 3.3972e6), | |||
JÚPITER (1.9e+27, 7.1492e7), | |||
SATURNO (5.688e+26, 6.0268e7), | |||
URANO (8.686e+25, 2.5559e7), | |||
NEPTUNO (1.024e+26, 2.4746e7), | |||
PLUTÃO (1.27e+22, 1.137e6); | |||
// constante de gravitação universal | |||
public static final double G = 6.67300E-11; // m³/kg/s² | |||
private double _massa; // kg | |||
private double _raio; // m | |||
public double massa() { return _massa; } | |||
public double raio() { return _raio; } | |||
Planeta(double massa, double raio) { _massa = massa; _raio = raio; } | |||
// gravidade à superfície | |||
public double gravidade() { return G * _massa / (_raio * _raio); } | |||
// peso (N) de outra massa (kg) à superfície | |||
public double peso(double massa) { return massa * gravidade(); } | |||
} | |||
</java5> | |||
== | == Experiência 1 == | ||
=== Programa de Teste === | === Programa de Teste === | ||
<java5> | |||
public class Teste1 { | |||
public static void main(String[] args) { | |||
System.out.println("** Estações"); | |||
for (Estação e : Estação.values()) | |||
System.out.println(e); | |||
System.out.println("** Planetas"); | |||
for (Planeta p : Planeta.values()) | |||
System.out.println(p); | |||
// Planeta x = new Planeta(2.5e22, 2e6); // erro: tipo não pode ser instanciado | |||
} | |||
} | |||
</java5> | |||
=== Resultados === | === Resultados === | ||
| Line 75: | Line 80: | ||
PLUTÃO | PLUTÃO | ||
== | == Experiência 2 == | ||
=== Programa de Teste === | === Programa de Teste === | ||
<java5> | |||
public class Teste2 { | |||
public static void main(String[] args) { | |||
double pesoNaTerra = Double.parseDouble(args[0]); | |||
double massa = pesoNaTerra / Planeta.TERRA.gravidade(); | |||
for (Planeta p : Planeta.values()) { | |||
System.out.printf("Peso em %s é %f%n", p, p.peso(massa)); | |||
} | |||
} | |||
} | |||
</java5> | |||
=== Resultados === | === Resultados === | ||
| Line 101: | Line 107: | ||
Peso em NEPTUNO é 92.204574 | Peso em NEPTUNO é 92.204574 | ||
Peso em PLUTÃO é 5.416831 | Peso em PLUTÃO é 5.416831 | ||
== Planetas: 2ª versão == | |||
<java5> | |||
public class NoSurfaceException extends Exception {} | |||
</java5> | |||
<java5> | |||
public enum Planeta { | |||
MERCÚRIO (3.303e+23, 2.4397e6), | |||
VÉNUS (4.869e+24, 6.0518e6), | |||
TERRA (5.976e+24, 6.37814e6), | |||
MARTE (6.421e+23, 3.3972e6), | |||
JÚPITER (1.9e+27, 7.1492e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | |||
SATURNO (5.688e+26, 6.0268e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | |||
URANO (8.686e+25, 2.5559e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | |||
NEPTUNO (1.024e+26, 2.4746e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | |||
PLUTÃO (1.27e+22, 1.137e6); | |||
// constante de gravitação universal | |||
public static final double G = 6.67300E-11; // m³/kg/s² | |||
private double _massa; // kg | |||
private double _raio; // m | |||
public double massa() { return _massa; } | |||
public double raio() { return _raio; } | |||
Planeta(double massa, double raio) { _massa = massa; _raio = raio; } | |||
// gravidade à superfície | |||
public double gravidade() { return G * _massa / (_raio * _raio); } | |||
// peso (N) de outra massa (kg) à superfície | |||
public double peso(double massa) throws NoSurfaceException { return massa * gravidade(); } | |||
} | |||
</java5> | |||
== Experiência 3 == | |||
=== Programa de Teste === | |||
<java5> | |||
public class Teste3 { | |||
public static void main(String[] args) { | |||
double pesoNaTerra = Double.parseDouble(args[0]); | |||
double massa = pesoNaTerra / Planeta.TERRA.gravidade(); | |||
for (Planeta p : Planeta.values()) { | |||
double peso; | |||
try { | |||
peso = p.peso(massa); | |||
System.out.printf("Peso em %s é %f%n", p, peso); | |||
} | |||
catch (NoSurfaceException nse) { | |||
System.out.printf("Peso em %s é difícil de calcular%n", p); | |||
} | |||
} | |||
} | |||
} | |||
</java5> | |||
=== Resultados === | |||
<FONT COLOR="#800000"><B>$ java Teste3</B></FONT> | |||
Peso em MERCÚRIO é 30.598367 | |||
Peso em VÉNUS é 73.304927 | |||
Peso em TERRA é 81.000000 | |||
Peso em MARTE é 30.677712 | |||
Peso em JÚPITER é difícil de calcular | |||
Peso em SATURNO é difícil de calcular | |||
Peso em URANO é difícil de calcular | |||
Peso em NEPTUNO é difícil de calcular | |||
Peso em PLUTÃO é 5.416831 | |||
Nesta listagem pode apreciar-se claramente a criação automática de classes internas anónimas (marcadas a <font color="blue">azul</font>) para comportar a implementação do comportamento especÃfico das instâncias <code>JÚPITER</code>, <code>SATURNO</code>, <code>URANO</code> e <code>NEPTUNO</code>. | |||
<FONT COLOR="#800000"><B>$ ls</B></FONT> | |||
<B>Planeta.java</B> Planeta.class <font color="blue">Planeta$1.class Planeta$2.class Planeta$3.class Planeta$4.class</font> | |||
<B>Teste2.java</B> Teste2.class | |||
[[category:Ensino]] | |||
[[category:PO]] | |||
[[category:PO Exemplos]] | |||
[[category:Java]] | |||
Latest revision as of 18:24, 23 October 2013
Estações
Este exemplo mostra um tipo enumerado na sua versão mais simples, i.e., apenas se indicam os elementos que constituem a enumeração. <java5>
public enum Estação {
PRIMAVERA, VERÃO, OUTONO, INVERNO
}
</java5>
Planetas: 1ª versão
Exemplo adaptado do manual de Java 1.5 da Sun Microsystems, Inc. [1] <java5>
public enum Planeta {
MERCÚRIO (3.303e+23, 2.4397e6),
VÉNUS (4.869e+24, 6.0518e6),
TERRA (5.976e+24, 6.37814e6),
MARTE (6.421e+23, 3.3972e6),
JÚPITER (1.9e+27, 7.1492e7),
SATURNO (5.688e+26, 6.0268e7),
URANO (8.686e+25, 2.5559e7),
NEPTUNO (1.024e+26, 2.4746e7),
PLUTÃO (1.27e+22, 1.137e6);
// constante de gravitação universal
public static final double G = 6.67300E-11; // m³/kg/s²
private double _massa; // kg
private double _raio; // m
public double massa() { return _massa; }
public double raio() { return _raio; }
Planeta(double massa, double raio) { _massa = massa; _raio = raio; }
// gravidade à superfície
public double gravidade() { return G * _massa / (_raio * _raio); }
// peso (N) de outra massa (kg) à superfície
public double peso(double massa) { return massa * gravidade(); }
}
</java5>
Experiência 1
Programa de Teste
<java5>
public class Teste1 {
public static void main(String[] args) {
System.out.println("** Estações");
for (Estação e : Estação.values())
System.out.println(e);
System.out.println("** Planetas");
for (Planeta p : Planeta.values())
System.out.println(p);
// Planeta x = new Planeta(2.5e22, 2e6); // erro: tipo não pode ser instanciado
}
}
</java5>
Resultados
$ java Teste1 ** Estação PRIMAVERA VERÃO OUTONO INVERNO ** Planeta MERCÚRIO VÉNUS TERRA MARTE JÚPITER SATURNO URANO NEPTUNO PLUTÃO
Experiência 2
Programa de Teste
<java5>
public class Teste2 {
public static void main(String[] args) {
double pesoNaTerra = Double.parseDouble(args[0]);
double massa = pesoNaTerra / Planeta.TERRA.gravidade();
for (Planeta p : Planeta.values()) {
System.out.printf("Peso em %s é %f%n", p, p.peso(massa));
}
}
}
</java5>
Resultados
$ java Teste2 81 Peso em MERCÚRIO é 30.598367 Peso em VÉNUS é 73.304927 Peso em TERRA é 81.000000 Peso em MARTE é 30.677712 Peso em JÚPITER é 204.975160 Peso em SATURNO é 86.347259 Peso em URANO é 73.315303 Peso em NEPTUNO é 92.204574 Peso em PLUTÃO é 5.416831
Planetas: 2ª versão
<java5>
public class NoSurfaceException extends Exception {}
</java5> <java5>
public enum Planeta {
MERCÚRIO (3.303e+23, 2.4397e6),
VÉNUS (4.869e+24, 6.0518e6),
TERRA (5.976e+24, 6.37814e6),
MARTE (6.421e+23, 3.3972e6),
JÚPITER (1.9e+27, 7.1492e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } },
SATURNO (5.688e+26, 6.0268e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } },
URANO (8.686e+25, 2.5559e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } },
NEPTUNO (1.024e+26, 2.4746e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } },
PLUTÃO (1.27e+22, 1.137e6);
// constante de gravitação universal
public static final double G = 6.67300E-11; // m³/kg/s²
private double _massa; // kg
private double _raio; // m
public double massa() { return _massa; }
public double raio() { return _raio; }
Planeta(double massa, double raio) { _massa = massa; _raio = raio; }
// gravidade à superfície
public double gravidade() { return G * _massa / (_raio * _raio); }
// peso (N) de outra massa (kg) à superfície
public double peso(double massa) throws NoSurfaceException { return massa * gravidade(); }
}
</java5>
Experiência 3
Programa de Teste
<java5>
public class Teste3 {
public static void main(String[] args) {
double pesoNaTerra = Double.parseDouble(args[0]);
double massa = pesoNaTerra / Planeta.TERRA.gravidade();
for (Planeta p : Planeta.values()) {
double peso;
try {
peso = p.peso(massa);
System.out.printf("Peso em %s é %f%n", p, peso);
}
catch (NoSurfaceException nse) {
System.out.printf("Peso em %s é difícil de calcular%n", p);
}
}
}
}
</java5>
Resultados
$ java Teste3 Peso em MERCÚRIO é 30.598367 Peso em VÉNUS é 73.304927 Peso em TERRA é 81.000000 Peso em MARTE é 30.677712 Peso em JÚPITER é difícil de calcular Peso em SATURNO é difícil de calcular Peso em URANO é difícil de calcular Peso em NEPTUNO é difícil de calcular Peso em PLUTÃO é 5.416831
Nesta listagem pode apreciar-se claramente a criação automática de classes internas anónimas (marcadas a azul) para comportar a implementação do comportamento especÃfico das instâncias JÚPITER, SATURNO, URANO e NEPTUNO.
$ ls Planeta.java Planeta.class Planeta$1.class Planeta$2.class Planeta$3.class Planeta$4.class Teste2.java Teste2.class