![Page 1: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/1.jpg)
Apresentação 11
EnumeraçõesInstrução de selecção switch
Gama limitada dos tipos inteiros
![Page 2: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/2.jpg)
Fundamentos de Programação 2
Da apresentação anterior…
Encapsulação
Cópia de instâncias
Igualdade de instâncias
2013/2014
![Page 3: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/3.jpg)
Enumerações
2013/2014 Fundamentos de Programação 3
![Page 4: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/4.jpg)
Como representar…
Sexo boolean? int? String?
Dias da semana int? String?
Meses do ano
Pontos cardinais
Estado civil2013/2014 Fundamentos de Programação 4
Por exemplo:class Human { … public boolean isFemale() { return isFemale; } … private boolean isFemale;}
Problemas:1. Representação indirecta.2. Não se pode imprimir o sexo.
Por exemplo:class Human { … public static final int MALE = 0; public static final int FEMALE = 1; … public int getSex() { return sex; } … private int sex;}
Problemas:1. Inteiros podem tomar muito mais que
os dois valores pretendidos.2. Ao imprimir surgem números.
Por exemplo:class Human { … public static final String MALE = "Male"; public static final String FEMALE = "Female"; … public String getSex() { return sex; } … private String sex;}
Problemas:1. Cadeias de caracteres podem tomar
muito mais que os dois valores pretendidos.
2. Comparação possível apenas com equals.
Mesmos problemas!
Mesmos problemas!
![Page 5: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/5.jpg)
Fundamentos de Programação 5
O que são?
São classes, mas especiais
São tipos de valor (e de referência!)
Valores Definidos explicitamente, por extensão Em número finito Fixos Formam sequência
2013/2014
!!??
![Page 6: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/6.jpg)
Exemplos simples
Tipo de valores a representar Java
Sexo (masculino e feminino) public enum Sex { MALE, FEMALE}
Dias da semana (de domingo a segunda-feira)
public enum DayOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}
Pontos cardeais (Norte, Sul, Este e Oeste)
public enum CardinalDirection { NORTH, SOUTH, EAST, WEST}
2013/2014 Fundamentos de Programação 6
![Page 7: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/7.jpg)
Exemplo de utilização
public static void main(final String[] arguments) { final DayOfTheWeek day = DayOfTheWeek.MONDAY; DayOfTheWeek someDay = DayOfTheWeek.FRIDAY; out.println("Monday is " + day + "."); someDay = DayOfTheWeek.valueOf("FRIDAY"); someDay = DayOfTheWeek.valueOf("Friday"); if (someDay == DayOfTheWeek.FRIDAY) out.println("Some day is Friday.");
out.println("Some day is " + someDay + ".");}
2013/2014 Fundamentos de Programação 7
_Monday is MONDAY._
Monday is MONDAY.Some day is Friday._
Monday is MONDAY.Some day is Friday.Some day is FRIDAY._
![Page 8: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/8.jpg)
Fundamentos de Programação 8
Método valueOf
Disponibilizado automaticamente
Devolve valor enumerado dada cadeia de caracteres com o seu nome exacto
Exemplo
public enum Sex { MALE, FEMALE }
final Sex sex = Sex.valueOf("MALE");
2013/2014
«enumeration»Sex
MALE
FEMALE
sex
![Page 9: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/9.jpg)
Fundamentos de Programação 9
Operação toString
Disponibilizada automaticamente
Devolve cadeia de caracteres com nome exacto do valor enumerado
Exemplo
public enum Sex { MALE, FEMALE }
final Sex sex = Sex.FEMALE;final String sexName = sex.toString();
2013/2014
Mas pode sobrepor-se versão
especializada!
«enumeration»Sex
MALE
FEMALE
sex
sexName
“FEMALE”
![Page 10: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/10.jpg)
Fundamentos de Programação 10
Operação values
Disponibilizada automaticamente
values() devolve uma array com todos os valores, por ordem de declaração
Exemplo
public enum CardinalDirection { NORTH, SOUTH, EAST, WEST}
for (CardinalDirection direction : CardinalDirection.values()) out.println(direction);
2013/2014
«enumeration»CardinalDirection
NORTH
EAST
SOUTH
WEST
direction
![Page 11: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/11.jpg)
Operações técnicas
Evitar usar!
name() devolve sempre cadeia de caracteres com nome exacto do valor enumerado
ordinal() devolve número de ordem do valor enumerado Por ordem de declaração Primeiro valor tem ordem 0 (zero)2013/2014 Fundamentos de Programação 11
![Page 12: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/12.jpg)
Vantagens adicionais
Pode-se definir atributos e métodos específicos
Pode-se definir construtores específicos (desde que privados ou privados do pacote)
Cada valor pode ter sua própria sobreposição de uma dada operação
2013/2014 Fundamentos de Programação 12
![Page 13: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/13.jpg)
Fundamentos de Programação 13
Exemplo de método em enumerado
public enum CardinalDirection { NORTH, SOUTH, EAST, WEST; public String prettyName() { return name().charAt(0) + name().substring(1).toLowerCase(); }}
…
out.println(CardinalDirection.NORTH.name());out.println(CardinalDirection.SOUTH.prettyName());
2013/2014
_NORTH_NORTHSouth_
![Page 14: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/14.jpg)
Instrução de selecção switch
2013/2014 Fundamentos de Programação 14
![Page 15: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/15.jpg)
Fundamentos de Programação 15
Sintaxe
switch (expressão) {case valor1: instruções1
break;
case valor2: instruções2
break;…default: instruções break;}2013/2014
![Page 16: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/16.jpg)
Fundamentos de Programação 16
Funcionamento
Alternativa ao if-else
Quando fluxo de execução tem vários casos de acordo com valor de expressão
Expressão de controlo e valores dos casos Tipos primitivos inteiros (byte, short, int, etc.) char String Enumerações
2013/2014
Mas não boolean!(obrigado Nélio! )
![Page 17: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/17.jpg)
Fundamentos de Programação 17
Exemplo
public enum Command { SAVE, LOAD, EXIT;}
…
final Scanner inputScanner = new Scanner(System.in);out.print("Introduza um comando: ");final String commandText = inputScanner.nextLine();final Command command = Command.valueOf(commandText);switch(command) {case SAVE: … break;case LOAD: … break;case EXIT: … break;}
2013/2014
Nos casos de um switch recorrendo a uma enumeração, usa-se apenas os valores enumerados, i.e., não se pode preceder o valor do nome da enumeração: Command.LOAD.
Sem o break, a execução continua, passando para os casos seguintes!
![Page 18: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/18.jpg)
Gama limitada dos tipos inteiros
2013/2014 Fundamentos de Programação 18
![Page 19: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/19.jpg)
0 0 0 0
Inteiros com 4 bits
2013/2014 Fundamentos de Programação 19
1 1 1 1 0123456789101112131415 Suponhamos…
Com 4 bits representamos 16 inteiros com valores entre 0 e 15.
Com n bits representamos 2n inteiros com valores entre 0 e 2n-1.
![Page 20: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/20.jpg)
0 0 0 0
Inteiros com 4 bits
2013/2014 Fundamentos de Programação 20
0 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 0 1 01 0 1 11 1 0 01 1 0 11 1 1 01 1 1 1
![Page 21: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/21.jpg)
0 0 0 0
Inteiros com 4 bits
2013/2014 Fundamentos de Programação 21
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 11 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
![Page 22: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/22.jpg)
Inteiros com 4 bits
2013/2014 Fundamentos de Programação 22
0 0 0 00 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 11 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 10000
0001
0010
0011
0100
0101
0110
01111000
1001
1010
1011
1100
1101
1110
1111
![Page 23: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/23.jpg)
Negativos Positivos
Inteiros com 4 bits
2013/2014 Fundamentos de Programação 23
00000001
0010
0011
0100
0101
0110
01111000
1001
1010
1011
1100
1101
1110
1111
01
2
3
4
5
6
789
10
11
12
13
1415
+1
-1
10001001
1010
1011
1100
1101
1110
1111
Primeiro bit simpático para identificar valores negativos.
![Page 24: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/24.jpg)
Negativos Positivos
Inteiros com 4 bits
2013/2014 Fundamentos de Programação 24
00000001
0010
0011
0100
0101
0110
0111
01
2
3
4
5
6
7-8-7
-6
-5
-4
-3
-2-1
+1
-1
10001001
1010
1011
1100
1101
1110
1111
+1
-1
![Page 25: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/25.jpg)
Inteiros com 4 bits
2013/2014 Fundamentos de Programação 25
Negativos Positivos
00000001
0010
0011
0100
0101
0110
0111
01
2
3
4
5
6
7-8-7
-6
-5
-4
-3
-2-1
+1
-1
10001001
1010
1011
1100
1101
1110
1111
+1
-1
![Page 26: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/26.jpg)
Inteiros com 4 bits
7 + 1 = -86 + 2 = -85 + 4 = -7-8 - 1 = 7-5 - 6 = 5
2013/2014 Fundamentos de Programação 26
Negativos Positivos
00000001
0010
0011
0100
0101
0110
0111
01
2
3
4
5
6
7-8-7
-6
-5
-4
-3
-2-1
+1
-1
10001001
1010
1011
1100
1101
1110
1111
+1
-1
![Page 27: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/27.jpg)
Inteiros com n bits
2013/2014 Fundamentos de Programação 27
0…000…01
0…
0…
01…11
01
…
2n-1-1-2n-1
…-1
10…0010…01
1…
1…
11…11
![Page 28: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/28.jpg)
int tem 32 bits
(231 -1) + 1 = -231
-231 - 1 = 231 - 1
ou seja,
2147483647 + 1 = -2147483648
-2147483648 - 1 = 2147483647
2013/2014 Fundamentos de Programação 28
0…000…01
0…
0…
01…11
01
…
231-1-231
…-1
10…0010…01
1…
1…
11…11
![Page 29: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/29.jpg)
Fundamentos de Programação 29
Valores extremos de int
final int minimum = Integer.MIN_VALUE;final int maximum = Integer.MAX_VALUE;
out.println(minimum);out.println(maximum);
2013/2014
_-2147483648_-21474836482147483647_
Também estão definidos os extremos dos outros tipos inteiros.
![Page 30: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/30.jpg)
Valores extremos dos inteiros
2013/2014 Fundamentos de Programação 30
Tipo Bits
Valor mínimo Valor máximo
byte 8 -128 127
short 16 -32768 32767
int 32 -2147483648 2147483647
long 64 -9223372036854775808 9223372036854775807
![Page 31: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/31.jpg)
Solução? BigInteger
import java.math.BigInteger;
…
public class BigIntegerTester { public static BigInteger factorialOf(BigInteger n) { BigInteger factorial = BigInteger.valueOf(1); while (n != BigInteger.ZERO) { factorial = factorial.multiply(n); n = n.subtract(BigInteger.ONE); } return factorial; }
public static void main(final String[] arguments) { out.println("Number of different deck shuffles: " + factorialOf(BigInteger.valueOf(52))); }}
2013/2014 Fundamentos de Programação 31
![Page 32: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/32.jpg)
Fundamentos de Programação 32
A reter
Enumerações em Java
Instrução de selecção switch
Limites dos tipos inteiros
Classe especial BigInteger
2013/2014
![Page 33: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/33.jpg)
Fundamentos de Programação 33
Referências
Enumerações no Java Tutorial
Classe BigInteger na API do Java 7
2013/2014
![Page 34: 11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação](https://reader034.vdocuments.pub/reader034/viewer/2022042602/5579a634d8b42ac1148b4af1/html5/thumbnails/34.jpg)
Fundamentos de Programação 34
Sumário
Enumerações
Instrução de selecção switch
Gama limitada dos tipos inteiros
2013/2014