SISTEMAS DEINFORMAÇÃO
1 1
1
Professoras:Ariane Machado LimaFátima L.S. Nunes
Caracteres e
Cadeias de caracteres /
Switch
SISTEMAS DEINFORMAÇÃO
2 2
2
Tipos primitivos de variáveis• Inteiros
– byte (8 bits) – short (16 bits)– int (32 bits) – long (64 bits)
• Ponto flutuante– float (32 bits)– double (64 bits)
• Booleano– boolean (tamanho não definido, embora seja 1 bit de
informação)
SISTEMAS DEINFORMAÇÃO
3 3
3
Tipos de variáveis• Inteiros
– byte (8 bits) – short (16 bits)– int (32 bits) – long (64 bits)
• Ponto flutuante– float (32 bits)– double (64 bits)
• Booleano– boolean (tamanho não definido, embora seja 1 bit de
informação)• Caracteres
– char (16 bits)
c
SISTEMAS DEINFORMAÇÃO
4 4
4
Exemploclass Questionario{ void verificaRespostaBinaria(char resp) {
if ( (resp == 's') || (resp == 'S'))System.out.println (“A resposta foi sim”);
else if ( (resp == 'n') || (resp == 'N'))System.out.println (“A resposta foi não”);
else System.out.println (“Resposta inválida”);
}}
SISTEMAS DEINFORMAÇÃO
5 5
5
O que são os caracteres?
• Valores do tipo char armazenam– Símbolos (caracteres visíveis como letras,
algarismos, etc.)– Sinais de controle (tabulação, fim de linha, fim de
arquivo, etc)
• Todos escritos entre aspas simples
• Caracteres de controle precedidos de \
SISTEMAS DEINFORMAÇÃO
6 6
6
Exemplos
• 'a' – caractere a, que é diferente de 'A'• '5' – caractere 5, que é diferente do numeral 5• '&' - caractere &• '\n' – fim de linha• '\t' – tabulação (tab)• ? - caractere '
SISTEMAS DEINFORMAÇÃO
7 7
7
Exemplos
• 'a' – caractere a, que é diferente de 'A'• '5' – caractere 5, que é diferente do numeral 5• '&' - caractere &• '\n' – fim de linha• '\t' – tabulação (tab)• '\'' - caractere '
SISTEMAS DEINFORMAÇÃO
8 8
8
Exemplos
• 'a' – caractere a, que é diferente de 'A'• '5' – caractere 5, que é diferente do numeral 5• '&' - caractere &• '\n' – fim de linha• '\t' – tabulação (tab)• '\'' - caractere '• ? - caractere \
SISTEMAS DEINFORMAÇÃO
9 9
9
Exemplos
• 'a' – caractere a, que é diferente de 'A'• '5' – caractere 5, que é diferente do numeral 5• '&' - caractere &• '\n' – fim de linha• '\t' – tabulação (tab)• '\'' - caractere '• '\\' - caractere \
SISTEMAS DEINFORMAÇÃO
10 10
10
Como os caracteres podem ser armazenados no comptador?
• Computador só guarda bits...
SISTEMAS DEINFORMAÇÃO
11 11
11
Como os caracteres podem ser armazenados no comptador?
• Computador só guarda bits...
• Tabela que associa cada caractere a um número
• Exemplos:– ASCII (lê-se: asc 2)– Unicode
SISTEMAS DEINFORMAÇÃO
12 12
12
ASCII• American Standard Code for Information
Interchange
• ASCII padrão com 128 caracteres
• ASCII extendido com 256 caracteres
• Caractere precisa ser armazenado em 8 bits
• Bastante usada até por volta do final dos anos 80
SISTEMAS DEINFORMAÇÃO
13 13
13
ASCII - padrãoCaracteres invisíveis(a maioria obsoletos, da época dos cartões perfurados)
SISTEMAS DEINFORMAÇÃO
14 14
14
ASCII extendido (fabricante-dependente!!!)
IBM
SISTEMAS DEINFORMAÇÃO
15 15
15
Declínio do ASCII
• Código limitado
– Usado pelo Notepad do Windows
– Usado quando pede-se para salvar como “text only”
• Não contempla caracteres de outras línguas
• Dependente de plataforma
SISTEMAS DEINFORMAÇÃO
16 16
16
Unicode
• Movimento iniciado em 1986, discutindo-se a criação de um padrão internacional
• Consórcio Unicode fundado em 1991• Alguns membros:
SISTEMAS DEINFORMAÇÃO
17 17
17
Unicode• “Unicode fornece um número único para cada
caracter, não importa a plataforma, o programa ou a língua.”
• A primeira versão do Unicode (1991 a 1995) era uma codificação de 16 bits.
• A partir da Unicode 2.0 vai de U+0000 a U+10FFFF, o que significa um espaço de 21 bits– Diferentes formas para representar esse código
SISTEMAS DEINFORMAÇÃO
18 18
18
UTFs - Unicode transformation format
• UTF é um mapeamento de cada ponto Unicode para uma sequência única de bytes
• UTF-8 usa 1 a 4 bytes (de 8 bits)
• UTF-16 usa 1 a 2 unidades de 16 bits
• UTF-32 usa 1 unidade de 32 bits
SISTEMAS DEINFORMAÇÃO
19 19
19
UTFs - Unicode transformation format
• UTF é um mapeamento de cada ponto Unicode para uma sequência única de bytes
• UTF-8 usa 1 a 4 bytes (de 8 bits)– Mais comum na web
• UTF-16 usa 1 a 2 unidades de 16 bits– Java e Windows
• UTF-32 usa 1 unidade de 32 bits– Muitos sistemas UNIX
SISTEMAS DEINFORMAÇÃO
20 20
20
Unicode e Java• Java usa UTF-16• char ocupa 16 bits• Se um caracter é um número, posso escrever algo
como:class Caracteres{ void imprimeNPrimeirosCaracteres (int n) { char caracter = 0; while (caracter < n) { System.out.print(caracter + " "); caracter++; } System.out.println(""); }}
SISTEMAS DEINFORMAÇÃO
21 21
21
• ou...
void imprimeNCaracteresAPartirDe (char caractere, int n) { int i = 1; while (i <= n) { System.out.print(caractere + " "); caractere++; i++; } System.out.println(""); }
SISTEMAS DEINFORMAÇÃO
22 22
22
ASCII e Unicode
• Note que os 128 primeiros caracteres Unicode equivalem aos 128 caracteres ASCII padrão
• Em C, um char tem 8 bits e usa ASCII
• Mais detalhes sobre Unicode em:www.unicode.org
SISTEMAS DEINFORMAÇÃO
23 23
23
Tipos de variáveis• Inteiros
– byte (8 bits) – default: 0– short (16 bits)– default: 0– int (32 bits) – default: 0– long (64 bits) – default: 0L
• Ponto flutuante– float (32 bits) – default: 0.0f– double (64 bits) – default: 0.0d
• Booleano– boolean (tamanho não definido, embora seja 1 bit de
informação) – default: false• Caracteres
– char (16 bits) – default: '\u0000' (ou 0)
SISTEMAS DEINFORMAÇÃO
24 24
24
Exemplo: minúsculas e maiúsculas
boolean eMinuscula (char c){
?}
SISTEMAS DEINFORMAÇÃO
25 25
25
Exemplo: minúsculas e maiúsculas
boolean eMinuscula (char c){
if ((c >= 'a') && (c <= 'z'))return true;
else return false;
}
SISTEMAS DEINFORMAÇÃO
26 26
26
Exemplo: minúsculas e maiúsculas
boolean eMinuscula (char c){
return ((c >= 'a') && (c <= 'z'));}
SISTEMAS DEINFORMAÇÃO
27 27
27
Exemplo: minúsculas e maiúsculas
boolean eMinuscula (char c){
return ((c >= 'a') && (c <= 'z'));}
boolean eMaiuscula (char c){
?}
SISTEMAS DEINFORMAÇÃO
28 28
28
Exemplo: minúsculas e maiúsculas
boolean eMinuscula (char c){
return ((c >= 'a') && (c <= 'z'));}
boolean eMaiuscula (char c){
return ((c >= 'A') && (c <= 'Z'));}
SISTEMAS DEINFORMAÇÃO
29 29
29
Exemplo: minúsculas e maiúsculas
char minusculaParaMaiuscula (char c){
?}
SISTEMAS DEINFORMAÇÃO
30 30
30
Exemplo: minúsculas e maiúsculas
char MinusculaParaMaiuscula (char c){
if (eMaiuscula(c))return c;
else if (eMinuscula(c)){
?} else {
System.out.println(“Caractere inválido!”);return '\u0000';
}
SISTEMAS DEINFORMAÇÃO
31 31
31
Exemplo: minúsculas e maiúsculas
char MinusculaParaMaiuscula (char c){
if (eMaiuscula(c))return c;
else if (eMinuscula(c)){
int distancia = 'A' – 'a';?
} else {
System.out.println(“Caractere inválido!”);return '\u0000';
}
SISTEMAS DEINFORMAÇÃO
32 32
32
Exemplo: minúsculas e maiúsculas
char MinusculaParaMaiuscula (char c){
if (eMaiuscula(c))return c;
else if (eMinuscula(c)){
int distancia = 'A' – 'a';return (c+distancia);
} else {
System.out.println(“Caractere inválido!”);return '\u0000';
}
SISTEMAS DEINFORMAÇÃO
33 33
33
Cadeias de caracteres
• “Esta é uma cadeia de caracteres”
• System.out.println(“Esta é uma cadeia de caracteres”);
• 2 opções para implementar essa cadeias:– Vetor (ou array) de caracteres (vamos aprender
em maio)– Classe String, já pronta em Java
SISTEMAS DEINFORMAÇÃO
34 34
34
String
• Instanciação não precisa usar new explicitamente
• String str = “Esta é uma cadeia de caracteres”;
SISTEMAS DEINFORMAÇÃO
35 35
35
String : + é o operador de concatenação
String a = “Esta é uma “;String b = “cadeia de caracteres”;String c = a + b;
System.out.println(c);
SISTEMAS DEINFORMAÇÃO
36 36
36
Podemos concatenar Strings e números
String res = “O resultado é “;int i = 10;String c = res + i;
System.out.println(c);
SISTEMAS DEINFORMAÇÃO
37 37
37
Alguns métodos da classe String
• char charAt (int index) – devolve o caractere que está na posição index(índices vão de zero até o tamanho do string menos 1)
String str = “mesa”;System.out.println(str.charAt (0)); // imprime mSystem.out.println(str.charAt (3)); // imprime a
SISTEMAS DEINFORMAÇÃO
38 38
38
Alguns métodos da classe String
• boolean endsWith (String suffix) – verifica se a string termina com o sufixo suffix(índices vão de zero até o tamanho do string menos 1)
void processaArquivosJava (String nomeDoArquivo){
if (nomeDoArquivo.endsWith(“.java”)){// faz o que tem que fazer
}else
System.out.println(“Este não é um arquivo java”);}
SISTEMAS DEINFORMAÇÃO
39 39
39
Alguns métodos da classe String
• int indexOf (char ch) – devolve o índice da primeira ocorrência de ch na string, ou -1 caso não exista(índices vão de zero até o tamanho do string menos 1)
String nomeArquivo = “Caracteres.java”;System.out.println(nomeArquivo.indexOf('.'));
// imprime ?System.out.println(nomeArquivo.indexOf('x'));
// imprime ?
SISTEMAS DEINFORMAÇÃO
40 40
40
Alguns métodos da classe String
• int indexOf (char ch) – devolve o índice da primeira ocorrência de ch na string, ou -1 caso não exista(índices vão de zero até o tamanho do string menos 1)
String nomeArquivo = “Caracteres.java”;System.out.println(nomeArquivo.indexOf('.'));
// imprime 10System.out.println(nomeArquivo.indexOf('x'));
// imprime -1
SISTEMAS DEINFORMAÇÃO
41 41
41
Alguns métodos da classe String
• int length() – devolve o tamanho da string
String str = “java”;System.out.println(str.length()); // imprime 4
SISTEMAS DEINFORMAÇÃO
42 42
42
Alguns métodos da classe String
• String toUpperCase() – devolve a string convertida em maiúscula
String str = “java”;System.out.println(str.toUpperCase()); // imprime JAVA
SISTEMAS DEINFORMAÇÃO
43 43
43
Alguns métodos da classe String
• int compareTo(String other) – compara duas strings. Devolve:– inteiro positivo se other for “menor”– 0 se forem iguais– inteiro negativo se other for “maior”(ordem lexicográfica)
String str1 = “mesa”; String str2 = “cadeira”; System.out.println(str1.compareTo(str2))); // imprime 10
SISTEMAS DEINFORMAÇÃO
44 44
44
Alguns métodos da classe String
• String substring(int inicio, int fim) – devolve um objeto String formado pelo substring do índice inicio ao índice fim
String str = “banana”; System.out.println(str.substring(1, 3)); // imprime ana
SISTEMAS DEINFORMAÇÃO
45 45
45
Outros métodos em...
• http://java.sun.com/javase/6/docs/api/java/lang/String.html
SISTEMAS DEINFORMAÇÃO
4616/04/09 46
46
Comando Switch• Algumas vezes queremos tratar de forma
diferenciada vários possíveis (e diferentes) resultados de uma mesma expressão
void executaOpcaoUsuario(int opcao){if (opcao == 1) { /* faça certas coisas - 1*/ }else if (opcao == 2) { /* faça certas coisas - 2 */ }...elseif (opcao == n) { /* faça certas coisas - n*/ }else { /* faça outras coisas */ }
}
SISTEMAS DEINFORMAÇÃO
4716/04/09 47
47
Comando Switch • Sintaxe:
switch (expressao){ case constante 1:
{comandos_1 se expressão == constante 1}case constante 2: {comandos_2 se expressão == constante 2}
...case constante n:
{comandos_n se expressão == constante n}default:
{comandos_d se resultados anteriores falsos}}
SISTEMAS DEINFORMAÇÃO
4816/04/09 48
48
Comando Switch • Sintaxe:
switch (expressao){ case constante 1:
{comandos_1 se expressão == constante 1}case constante 2: {comandos_2 se expressão == constante 2}
...case constante n:
{comandos_n se expressão == constante n}default:
{comandos_d se resultados anteriores falsos}}
comandos i a n são executados NESTA ORDEM quando expressão é igual à constante i
SISTEMAS DEINFORMAÇÃO
4916/04/09 49
49
Exemplo
class ExemploSwitch{ void executaOpcaoUsuario(int opcao) { switch (opcao) { case 1: System.out.println("Usuário digitou opção 1"); case 2: System.out.println("Usuário digitou opção 2"); case 3: System.out.println("Usuário digitou opção 3"); case 4: System.out.println("Usuário digitou opção 4"); default: System.out.println("Opcão inválida"); } }}
> ExemploSwitch s = new ExemploSwitch()> s.executaOpcaoUsuario (2)
?
SISTEMAS DEINFORMAÇÃO
5016/04/09 50
50
Exemplo
class ExemploSwitch{ void executaOpcaoUsuario(int opcao) { switch (opcao) { case 1: System.out.println("Usuário digitou opção 1"); case 2: System.out.println("Usuário digitou opção 2"); case 3: System.out.println("Usuário digitou opção 3"); case 4: System.out.println("Usuário digitou opção 4"); default: System.out.println("Opcão inválida"); } }}
> ExemploSwitch s = new ExemploSwitch()> s.executaOpcaoUsuario (2)
Usuário digitou opção 2Usuário digitou opção 3Usuário digitou opção 4
SISTEMAS DEINFORMAÇÃO
5116/04/09 51
51
Comando Switch • Sintaxe:
switch (expressao){ case constante 1:
{comandos_1 se expressão == constante 1; break; }case constante 2: {comandos_2 se expressão == constante 2 ; break; }
...case constante n:
{comandos_n se expressão == constante n ; break; }default:
{comandos_d se resultados anteriores falsos}}
SISTEMAS DEINFORMAÇÃO
5216/04/09 52
52
Exemploclass ExemploSwitch{ void executaOpcaoUsuario(int opcao) { switch (opcao) { case 1: System.out.println("Usuário digitou opção 1"); break; case 2: System.out.println("Usuário digitou opção 2"); break; case 3: System.out.println("Usuário digitou opção 3"); break; case 4: System.out.println("Usuário digitou opção 4"); break; default: System.out.println("Opcão inválida"); } }}
> ExemploSwitch s = new ExemploSwitch()> s.executaOpcaoUsuario (4)Usuário digitou opção 4> s.executaOpcaoUsuario (2)Usuário digitou opção 2> s.executaOpcaoUsuario (0)Opcão inválida
SISTEMAS DEINFORMAÇÃO
5316/04/09 53
53
Comando Switch switch (expressao){ case constante 1:
{comandos_1 se expressão == constante 1; break; }case constante 2: {comandos_2 se expressão == constante 2 ; break; }
...case constante n:
{comandos_n se expressão == constante n ; break; }default:
{comandos_d se resultados anteriores falsos}}
Equivale a
if (expressão == constante 1) { comandos_1; }else if (expressão == constante 2) { comandos_2; }...else if (expressão == constante n) { comandos_n; }else { comandos_d; }
SISTEMAS DEINFORMAÇÃO
5416/04/09 54
54
Switch com charclass ExemploSwitch{ void executaOpcaoUsuario(char opcao) { switch (opcao) { case 'S': System.out.println("Usuário digitou opção S - Salvar"); break; case 'A': System.out.println("Usuário digitou opção A - Abrir"); break; case 'F': System.out.println("Usuário digitou opção F - Fechar"); break; case 'C': System.out.println("Usuário digitou opção C – Salvar Como"); break; default: System.out.println("Opcão inválida"); } }}
SISTEMAS DEINFORMAÇÃO
5516/04/09 55
55
Comando Switch • Sintaxe:
switch (expressao){ case constante 1:
{comandos_1 se expressão == constante 1; break; }case constante 2: {comandos_2 se expressão == constante 2 ; break; }
...case constante n:
{comandos_n se expressão == constante n ; break; }default:
{comandos_d se resultados anteriores falsos}}
OPCIONAL
SISTEMAS DEINFORMAÇÃO
5616/04/09 56
56
Exemplo 2:Dado um mês, imprime o número de dias que ele tem
SISTEMAS DEINFORMAÇÃO
5716/04/09 57
57
Exemplo 2:Dado um mês, imprime o número de dias que ele tem
switch (mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDias = 31; break; case 4: case 6: case 9: case 11: numDias = 30; break; case 2: if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || (ano % 400 == 0) ) numDias = 29; else numDias = 28; break; default: System.out.println("Mês inválido."); break; } System.out.println("Número de dias = " + numDias);
SISTEMAS DEINFORMAÇÃO
5816/04/09 58
58
Switch e break
• Em Java, a expressão do switch:– pode ser dos tipos primitivos int, short, byte, char
e enum (este ainda não aprendemos)– pode ser dos tipos abstratos Integer, Short, Byte e
Character (também não vimos)– Obs: não pode ser String
• A exigência de um break para não seguir a execução dos demais comandos é considerado um ponto fraco de Java (herdado de C)
SISTEMAS DEINFORMAÇÃO
59 59
59
Professoras:Ariane Machado LimaFátima L.S. Nunes
Caracteres e
Cadeias de caracteres /
Switch