Strings em Java são imutáveis. Ao modificar um caractere em um String, na verdade se está criando um novo objeto String. Comparar Strings com == verifica se os objetos são os mesmos na memória, não se o conteúdo é igual.
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
(ACH2001) Introdução à Programação - Aula 16
1. Aula 16 – Strings, Entrada e Busca
Sequencial
Norton Trevisan Roman
2 de maio de 2020
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 1 / 33
2. Revendo Strings
At´e agora, como hav´ıamos definido strings?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 2 / 33
3. Revendo Strings
At´e agora, como hav´ıamos definido strings?
Arranjos de caracteres public static void main(String[] args) {
char[] str = {’o’,’b’,’a’};
char[] str2 = new char[2];
str2[0] = ’e’;
str2[1] = ’i’;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 2 / 33
4. Revendo Strings
At´e agora, como hav´ıamos definido strings?
Arranjos de caracteres
Embora funcione, seu
uso ´e bastante
limitado em Java
public static void main(String[] args) {
char[] str = {’o’,’b’,’a’};
char[] str2 = new char[2];
str2[0] = ’e’;
str2[1] = ’i’;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 2 / 33
5. Revendo Strings
At´e agora, como hav´ıamos definido strings?
Arranjos de caracteres
Embora funcione, seu
uso ´e bastante
limitado em Java
Felizmente, h´a uma
classe Java definida
apenas para o uso de
strings:
public static void main(String[] args) {
char[] str = {’o’,’b’,’a’};
char[] str2 = new char[2];
str2[0] = ’e’;
str2[1] = ’i’;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 2 / 33
6. Revendo Strings
At´e agora, como hav´ıamos definido strings?
Arranjos de caracteres
Embora funcione, seu
uso ´e bastante
limitado em Java
Felizmente, h´a uma
classe Java definida
apenas para o uso de
strings:
public static void main(String[] args) {
char[] str = {’o’,’b’,’a’};
char[] str2 = new char[2];
str2[0] = ’e’;
str2[1] = ’i’;
}
public static void main(String[] args) {
String s = "Meu string";
System.out.println(s);
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 2 / 33
7. Revendo Strings
Podemos ent˜ao
reescrever os
nomes dos
materiais da
piscina
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 3 / 33
8. Revendo Strings
Podemos ent˜ao
reescrever os
nomes dos
materiais da
piscina
De...
static char[][] nomes = {{’A’,’l’,’v’,
’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 3 / 33
9. Revendo Strings
Podemos ent˜ao
reescrever os
nomes dos
materiais da
piscina
De...
Para...
static char[][] nomes = {{’A’,’l’,’v’,
’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
static String[] nomes = {"Alvenaria",
"Vinil",
"Fibra",
"Pl´astico"};
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 3 / 33
10. Strings
Como fazemos
para acessarmos o
caractere em uma
determinada
posi¸c˜ao no string?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 4 / 33
11. Strings
Como fazemos
para acessarmos o
caractere em uma
determinada
posi¸c˜ao no string?
public static void main(String[] args)
{
String s = "Meu string";
System.out.println(s[4]);
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 4 / 33
12. Strings
Como fazemos
para acessarmos o
caractere em uma
determinada
posi¸c˜ao no string?
public static void main(String[] args)
{
String s = "Meu string";
System.out.println(s[4]);
}
AreaPiscina.java:102: array required, but java.lang.String
found
System.out.println(s[4]);
^
1 error
Strings n˜ao s˜ao arranjos!
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 4 / 33
13. Strings
Como fazemos
para acessarmos o
caractere em uma
determinada
posi¸c˜ao no string?
public static void main(String[] args)
{
String s = "Meu string";
System.out.println(s.charAt(4));
}
AreaPiscina.java:102: array required, but java.lang.String
found
System.out.println(s[4]);
^
1 error
Strings n˜ao s˜ao arranjos! Deve-se usar o m´etodo charAt()
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 4 / 33
14. Strings
E como podemos modificar um caractere no String?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 5 / 33
15. Strings
E como podemos modificar um caractere no String?
N˜ao podemos. Objetos
String s˜ao constantes
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 5 / 33
16. Strings
E como podemos modificar um caractere no String?
N˜ao podemos. Objetos
String s˜ao constantes
N˜ao podem ser
mudados ap´os terem
sido criados
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 5 / 33
17. Strings
E como podemos modificar um caractere no String?
N˜ao podemos. Objetos
String s˜ao constantes
N˜ao podem ser
mudados ap´os terem
sido criados
public static void main(String[] args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Solu¸c˜ao: transformar em arranjo...
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 5 / 33
18. Strings
E como podemos modificar um caractere no String?
N˜ao podemos. Objetos
String s˜ao constantes
N˜ao podem ser
mudados ap´os terem
sido criados
public static void main(String[] args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Solu¸c˜ao: transformar em arranjo...
Sempre criar´a um novo objeto
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 5 / 33
19. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
20. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
21. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Classe ???
main
args
0x23f
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
22. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Classe ???
main
args
0x23f
s
0xfdf
0xdaf
(0xdaf)
???
0xa23
“Meu string”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
23. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Classe ???
main
args
0x23f
s
0xfdf
0xdaf
(0xdaf)
???
0xa23
“Meu string”
toCharArray
???
s2
0x98a
0x158
0x158
M e u s t r . . .
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
24. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Classe ???
main
args
0x23f
s
0xfdf
0xdaf
(0xdaf)
???
0xa23
“Meu string”
s2
0x98a
0x158
0x158
M e u b t r . . .
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
25. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Classe ???
main
args
0x23f
s
0xfdf
0xd23
(0xdaf)
???
0xa23
“Meu string”
s2
0x98a
0x158
0x158
M e u b t r . . .
(0xd23)
???
0xab3
“Meu dtring”
String
ValueOf
???
0x236
0x158
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
26. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
O primeiro objeto String
teve sua referˆencia perdida
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Classe ???
main
args
0x23f
s
0xfdf
0xd23
(0xdaf)
???
0xa23
“Meu string”
s2
0x98a
0x158
0x158
M e u b t r . . .
(0xd23)
???
0xab3
“Meu dtring”
String
ValueOf
???
0x236
0x158
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
27. Olhando mais de perto...
O que houve com
‘‘Meu string’’?
Vejamos o
comportamento da
mem´oria:
O primeiro objeto String
teve sua referˆencia perdida
Ser´a desalocado pelo
garbage collector
public static void main(String[]
args) {
String s = "Meu string";
char[] s2 = s.toCharArray();
s2[4] = ’b’;
s = String.valueOf(s2);
//ou s = new String(s2);
System.out.println(s);
}
Classe ???
main
args
0x23f
s
0xfdf
0xd23
(0xdaf)
???
0xa23
“Meu string”
s2
0x98a
0x158
0x158
M e u b t r . . .
(0xd23)
???
0xab3
“Meu dtring”
String
ValueOf
???
0x236
0x158
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 6 / 33
28. Strings
O que acontece se fizermos str1 == str2?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 7 / 33
29. Strings
O que acontece se fizermos str1 == str2?
Ser˜ao comparadas as referˆencias (endere¸cos)
Ser´a true somente se ambos str1 e str2 contiverem o
mesmo endere¸co na mem´oria
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 7 / 33
30. Strings
O que acontece se fizermos str1 == str2?
Ser˜ao comparadas as referˆencias (endere¸cos)
Ser´a true somente se ambos str1 e str2 contiverem o
mesmo endere¸co na mem´oria
String str1 = "Exemplo";
String str2 = new String("Exemplo");
String str3 = "Outro exemplo";
if (str1 == str2) ...
if (str1 == str3) ...
str3 = str1;
if (str1 == str3) ...
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 7 / 33
31. Strings
O que acontece se fizermos str1 == str2?
Ser˜ao comparadas as referˆencias (endere¸cos)
Ser´a true somente se ambos str1 e str2 contiverem o
mesmo endere¸co na mem´oria
String str1 = "Exemplo";
String str2 = new String("Exemplo");
String str3 = "Outro exemplo";
if (str1 == str2) ... // false (objetos diferentes)
if (str1 == str3) ...
str3 = str1;
if (str1 == str3) ...
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 7 / 33
32. Strings
O que acontece se fizermos str1 == str2?
Ser˜ao comparadas as referˆencias (endere¸cos)
Ser´a true somente se ambos str1 e str2 contiverem o
mesmo endere¸co na mem´oria
String str1 = "Exemplo";
String str2 = new String("Exemplo");
String str3 = "Outro exemplo";
if (str1 == str2) ... // false (objetos diferentes)
if (str1 == str3) ... // false (objetos diferentes)
str3 = str1;
if (str1 == str3) ...
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 7 / 33
33. Strings
O que acontece se fizermos str1 == str2?
Ser˜ao comparadas as referˆencias (endere¸cos)
Ser´a true somente se ambos str1 e str2 contiverem o
mesmo endere¸co na mem´oria
String str1 = "Exemplo";
String str2 = new String("Exemplo");
String str3 = "Outro exemplo";
if (str1 == str2) ... // false (objetos diferentes)
if (str1 == str3) ... // false (objetos diferentes)
str3 = str1;
if (str1 == str3) ... // true (mesmo objeto)
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 7 / 33
34. Strings
E se fizermos... public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
35. Strings
E se fizermos...
s = “Meu string”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
36. Strings
E se fizermos...
s = “Meu string”
s = “Meu stringoba”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
37. Strings
E se fizermos...
s = “Meu string”
s = “Meu stringoba”
s = “Meu stringobac”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
38. Strings
E se fizermos...
s = “Meu string”
s = “Meu stringoba”
s = “Meu stringobac”
s = “Meu stringobac4”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
39. Strings
E se fizermos...
s = “Meu string”
s = “Meu stringoba”
s = “Meu stringobac”
s = “Meu stringobac4”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
s = “Meu stringobac423.5”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
40. Strings
E se fizermos...
s = “Meu string”
s = “Meu stringoba”
s = “Meu stringobac”
s = “Meu stringobac4”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
s = “Meu stringobac423.5”
Como strings s˜ao imut´aveis, a cada mudan¸ca
criamos nova c´opia na mem´oria
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
41. Strings
E se fizermos...
s = “Meu string”
s = “Meu stringoba”
s = “Meu stringobac”
s = “Meu stringobac4”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
s = “Meu stringobac423.5”
Como strings s˜ao imut´aveis, a cada mudan¸ca
criamos nova c´opia na mem´oria
Sobrescrevendo o endere¸co que havia em s
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
42. Strings
E se fizermos...
s = “Meu string”
s = “Meu stringoba”
s = “Meu stringobac”
s = “Meu stringobac4”
public static void main(
String[] args) {
String s = "Meu string";
s = s + "oba";
s = s + ’c’;
s = s + 4;
s = s + 23.5;
}
s = “Meu stringobac423.5”
Como strings s˜ao imut´aveis, a cada mudan¸ca
criamos nova c´opia na mem´oria
Sobrescrevendo o endere¸co que havia em s
E perdendo assim a referˆencia `a c´opia antiga
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 8 / 33
43. Strings
Como fazer para
comparar dois strings?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 9 / 33
44. Strings
Como fazer para
comparar dois strings?
m´etodo equals
public static void main(String[]
args) {
String s = "Meu string";
String s2 = "Meu string";
System.out.println(
s.equals(s2));
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 9 / 33
45. Strings
Como fazer para
comparar dois strings?
m´etodo equals
E para saber o tamanho
de um string?
public static void main(String[]
args) {
String s = "Meu string";
String s2 = "Meu string";
System.out.println(
s.equals(s2));
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 9 / 33
46. Strings
Como fazer para
comparar dois strings?
m´etodo equals
E para saber o tamanho
de um string?
m´etodo length
public static void main(String[]
args) {
String s = "Meu string";
String s2 = "Meu string";
System.out.println(
s.equals(s2));
System.out.println(s.length());
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 9 / 33
47. Strings
Como fazer para
comparar dois strings?
m´etodo equals
E para saber o tamanho
de um string?
m´etodo length
public static void main(String[]
args) {
String s = "Meu string";
String s2 = "Meu string";
System.out.println(
s.equals(s2));
System.out.println(s.length());
}
http://docs.oracle.com/javase/7/docs/api/
java/lang/String.html
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 9 / 33
48. Strings
O que ser´a
impresso?
public static void main(String[] args)
{
String s1 = "Bom dia";
String s2 = s1;
s1 = "Boa noite";
System.out.println(s2);
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 10 / 33
49. Strings
O que ser´a
impresso?
public static void main(String[] args)
{
String s1 = "Bom dia";
String s2 = s1;
s1 = "Boa noite";
System.out.println(s2);
}
Classe ???
main
args
0x23f
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 10 / 33
50. Strings
O que ser´a
impresso?
public static void main(String[] args)
{
String s1 = "Bom dia";
String s2 = s1;
s1 = "Boa noite";
System.out.println(s2);
}
Classe ???
main
args
0x23f
s1
0xfdf
0xdaf
(0xdaf)
???
0xa23
“Bom dia”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 10 / 33
51. Strings
O que ser´a
impresso?
public static void main(String[] args)
{
String s1 = "Bom dia";
String s2 = s1;
s1 = "Boa noite";
System.out.println(s2);
}
Classe ???
main
args
0x23f
s1
0xfdf
0xdaf
(0xdaf)
???
0xa23
“Bom dia”
s2
0x98a
0xdaf
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 10 / 33
52. Strings
O que ser´a
impresso?
public static void main(String[] args)
{
String s1 = "Bom dia";
String s2 = s1;
s1 = "Boa noite";
System.out.println(s2);
}
Classe ???
main
args
0x23f
s1
0xfdf
0x22f
(0xdaf)
???
0xa23
“Bom dia”
s2
0x98a
0xdaf
(0x22f)
???
0x526
“Boa noite”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 10 / 33
53. Strings
O que ser´a
impresso?
“Bom dia”
public static void main(String[] args)
{
String s1 = "Bom dia";
String s2 = s1;
s1 = "Boa noite";
System.out.println(s2);
}
Classe ???
main
args
0x23f
s1
0xfdf
0x22f
(0xdaf)
???
0xa23
“Bom dia”
s2
0x98a
0xdaf
(0x22f)
???
0x526
“Boa noite”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 10 / 33
54. Strings
E qual a sa´ıda desse
c´odigo?
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
55. Strings
E qual a sa´ıda desse
c´odigo?
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Teste
main
args
0x23f
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
56. Strings
E qual a sa´ıda desse
c´odigo?
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Teste
main
args
0x23f
x
0xfdf
0xdaf
(0xdaf)
???
0xa23
“String antigo”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
57. Strings
E qual a sa´ıda desse
c´odigo?
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Teste
main
args
0x23f
x
0xfdf
0xdaf
(0xdaf)
???
0xa23
“String antigo”
a
0x00f
0x22f
(0x22f)
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
58. Strings
E qual a sa´ıda desse
c´odigo?
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Teste
main
args
0x23f
x
0xfdf
0xdaf
(0xdaf)
???
0xa23
“String antigo”
a
0x00f
0x22f
(0x22f)
misterio
y
0x652
0xdaf
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
59. Strings
E qual a sa´ıda desse
c´odigo?
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Teste
main
args
0x23f
x
0xfdf
0xdaf
(0xdaf)
???
0xa23
“String antigo”
a
0x00f
0x22f
(0x22f)
misterio
y
0x652
0xd22
(0xd22)
???
0xaab
“Novo string”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
60. Strings
E qual a sa´ıda desse
c´odigo?
“String antigo”
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Teste
main
args
0x23f
x
0xfdf
0xdaf
(0xdaf)
???
0xa23
“String antigo”
a
0x00f
0x22f
(0x22f)
misterio
y
0x652
0xd22
(0xd22)
???
0xaab
“Novo string”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
61. Strings
E qual a sa´ıda desse
c´odigo?
“String antigo”
Modificamos o
parˆametro, e n˜ao a
vari´avel do objeto
class Teste {
void misterio(String y) {
y = "Novo string";
}
public static void main(String[] args) {
String x = "String antigo";
Teste a = new Teste();
a.misterio(x);
System.out.println(x);
}
}
Teste
main
args
0x23f
x
0xfdf
0xdaf
(0xdaf)
???
0xa23
“String antigo”
a
0x00f
0x22f
(0x22f)
misterio
y
0x652
0xd22
(0xd22)
???
0xaab
“Novo string”
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 11 / 33
62. Parˆametros da Linha de Comando
Considere o
m´etodo main public static void main(String[]
args) {
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 12 / 33
63. Parˆametros da Linha de Comando
Considere o
m´etodo main
O que s˜ao esses
args?
public static void main(String[]
args) {
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 12 / 33
64. Parˆametros da Linha de Comando
Considere o
m´etodo main
O que s˜ao esses
args?
S˜ao um arranjo de
Strings
public static void main(String[]
args) {
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 12 / 33
65. Parˆametros da Linha de Comando
Considere o
m´etodo main
O que s˜ao esses
args?
S˜ao um arranjo de
Strings
public static void main(String[]
args) {
for (String arg : args)
System.out.println(arg);
}
E o que o c´odigo no for faz?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 12 / 33
66. Parˆametros da Linha de Comando
Vamos ver...
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
67. Parˆametros da Linha de Comando
Vamos ver... $java AreaPiscina
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
68. Parˆametros da Linha de Comando
Vamos ver... $java AreaPiscina
$ java AreaPiscina oba
oba
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
69. Parˆametros da Linha de Comando
Vamos ver... $java AreaPiscina
$ java AreaPiscina oba
oba
$ java AreaPiscina oba 23
oba
23
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
70. Parˆametros da Linha de Comando
Vamos ver... $java AreaPiscina
$ java AreaPiscina oba
oba
$ java AreaPiscina oba 23
oba
23
$ java AreaPiscina oba 23 eba
oba
23
eba
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
71. Parˆametros da Linha de Comando
Vamos ver...
Escreve os argumentos
passados na linha de
comando
$java AreaPiscina
$ java AreaPiscina oba
oba
$ java AreaPiscina oba 23
oba
23
$ java AreaPiscina oba 23 eba
oba
23
eba
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
72. Parˆametros da Linha de Comando
Vamos ver...
Escreve os argumentos
passados na linha de
comando
Informa¸c˜oes adicionais
separadas por espa¸co
$java AreaPiscina
$ java AreaPiscina oba
oba
$ java AreaPiscina oba 23
oba
23
$ java AreaPiscina oba 23 eba
oba
23
eba
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
73. Parˆametros da Linha de Comando
Vamos ver...
Escreve os argumentos
passados na linha de
comando
Informa¸c˜oes adicionais
separadas por espa¸co
Usadas para passar
alguma informa¸c˜ao inicial
ao programa
$java AreaPiscina
$ java AreaPiscina oba
oba
$ java AreaPiscina oba 23
oba
23
$ java AreaPiscina oba 23 eba
oba
23
eba
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
74. Parˆametros da Linha de Comando
Vamos ver...
Escreve os argumentos
passados na linha de
comando
Informa¸c˜oes adicionais
separadas por espa¸co
Usadas para passar
alguma informa¸c˜ao inicial
ao programa
$java AreaPiscina
$ java AreaPiscina oba
oba
$ java AreaPiscina oba 23
oba
23
$ java AreaPiscina oba 23 eba
oba
23
eba
Ent˜ao args nos d´a um arranjo com cada argumento
passado ao programa, na ordem em que ´e passado
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 13 / 33
75. Parˆametros da Linha de Comando
Poder´ıamos, por
exemplo, usar a
linha de
comando para
definir o material
de uma piscina
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 14 / 33
76. Parˆametros da Linha de Comando
Poder´ıamos, por
exemplo, usar a
linha de
comando para
definir o material
de uma piscina
class AreaPiscina {
...
static int tipoMat(String nome) {
for (int i=0; i<nomes.length; i++) {
if (nomes[i].equals(nome)) return(i);
}
return(-1);
}
public static void main(String[] args) {
if (args.length != 1) System.out.println(
"N´umero de par^ametros inv´alido");
else {
AreaPiscina p = new AreaPiscina();
int material = AreaPiscina.tipoMat(args[0]);
if (material != -1)
System.out.println(p.valor(p.area(),
material));
else
System.out.println("Material inv´alido");
}
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 14 / 33
77. Parˆametros da Linha de Comando
Linha de Comando
$ java AreaPiscina
N´umero de par^ametros inv´alido
$ java AreaPiscina Pl´astic
Material inv´alido
$ java AreaPiscina Pl´astico
157079.63267948967
$ java AreaPiscina Alvenaria
471238.89803846896
class AreaPiscina {
...
static int tipoMat(String nome) {
for (int i=0; i<nomes.length; i++) {
if (nomes[i].equals(nome)) return(i);
}
return(-1);
}
public static void main(String[] args) {
if (args.length != 1) System.out.println(
"N´umero de par^ametros inv´alido");
else {
AreaPiscina p = new AreaPiscina();
int material = AreaPiscina.tipoMat(args[0]);
if (material != -1)
System.out.println(p.valor(p.area(),
material));
else
System.out.println("Material inv´alido");
}
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 15 / 33
78. Parˆametros da Linha de Comando
Ou poder´ıamos us´a-la
para definir o material e
o raio de uma piscina
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 16 / 33
79. Parˆametros da Linha de Comando
Ou poder´ıamos us´a-la
para definir o material e
o raio de uma piscina
class AreaPiscina {
...
public static void main(String[] args){
if (args.length != 2) System.out.
println("N´umero de par^ametros
inv´alido");
else {
int material =
AreaPiscina.tipoMat(args[0]);
AreaPiscina p = new AreaPiscina(
Double.parseDouble(args[1]));
if (material != -1)
System.out.println(p.valor(
p.area(),material));
else
System.out.println("Material
inv´alido");
}
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 16 / 33
80. Parˆametros da Linha de Comando
Ou poder´ıamos us´a-la
para definir o material e
o raio de uma piscina
Como a linha de comando
tem s´o strings, temos que
converter
class AreaPiscina {
...
public static void main(String[] args){
if (args.length != 2) System.out.
println("N´umero de par^ametros
inv´alido");
else {
int material =
AreaPiscina.tipoMat(args[0]);
AreaPiscina p = new AreaPiscina(
Double.parseDouble(args[1]));
if (material != -1)
System.out.println(p.valor(
p.area(),material));
else
System.out.println("Material
inv´alido");
}
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 16 / 33
81. Parˆametros da Linha de Comando
Ou poder´ıamos us´a-la
para definir o material e
o raio de uma piscina
Como a linha de comando
tem s´o strings, temos que
converter
Para isso usamos m´etodos
da classe Double
class AreaPiscina {
...
public static void main(String[] args){
if (args.length != 2) System.out.
println("N´umero de par^ametros
inv´alido");
else {
int material =
AreaPiscina.tipoMat(args[0]);
AreaPiscina p = new AreaPiscina(
Double.parseDouble(args[1]));
if (material != -1)
System.out.println(p.valor(
p.area(),material));
else
System.out.println("Material
inv´alido");
}
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 16 / 33
82. Parˆametros da Linha de Comando
Ou poder´ıamos us´a-la
para definir o material e
o raio de uma piscina
Como a linha de comando
tem s´o strings, temos que
converter
Para isso usamos m´etodos
da classe Double
Linha de Comando
$ java AreaPiscina Alvenaria 10
471238.89803846896
$ java AreaPiscina Alvenaria 20
1884955.5921538759
class AreaPiscina {
...
public static void main(String[] args){
if (args.length != 2) System.out.
println("N´umero de par^ametros
inv´alido");
else {
int material =
AreaPiscina.tipoMat(args[0]);
AreaPiscina p = new AreaPiscina(
Double.parseDouble(args[1]));
if (material != -1)
System.out.println(p.valor(
p.area(),material));
else
System.out.println("Material
inv´alido");
}
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 16 / 33
83. Parˆametros da Linha de Comando
Todo tipo primitivo tem sua classe equivalente
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 17 / 33
84. Parˆametros da Linha de Comando
Todo tipo primitivo tem sua classe equivalente
Todas, `a exce¸c˜ao de Character, com o m´etodo
parseTipo(String s)
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 17 / 33
85. Parˆametros da Linha de Comando
Todo tipo primitivo tem sua classe equivalente
Todas, `a exce¸c˜ao de Character, com o m´etodo
parseTipo(String s)
Primitivo Classe parse
int Integer parseInt(String s)
long Long parseLong(String s)
float Float parseFloat(String s)
double Double parseDouble(String s)
boolean Boolean parseBoolean(String s)
char Character –
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 17 / 33
86. Parˆametros da Linha de Comando
Todo tipo primitivo tem sua classe equivalente
Todas, `a exce¸c˜ao de Character, com o m´etodo
parseTipo(String s)
Primitivo Classe parse
int Integer parseInt(String s)
long Long parseLong(String s)
float Float parseFloat(String s)
double Double parseDouble(String s)
boolean Boolean parseBoolean(String s)
char Character –
http://download.oracle.com/javase/6/docs/api/
overview-summary.html
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 17 / 33
87. Entrada
Entrada via linha
de comando,
embora
interessante, ´e
limitada
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 18 / 33
88. Entrada
Entrada via linha
de comando,
embora
interessante, ´e
limitada
Reduz as
possibilidades de
intera¸c˜ao com o
usu´ario
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 18 / 33
89. Entrada
O ideal seria
trocar mensagens
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 19 / 33
90. Entrada
O ideal seria
trocar mensagens
Escrevendo coisas
na tela
(println())
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 19 / 33
91. Entrada
O ideal seria
trocar mensagens
Escrevendo coisas
na tela
(println())
Lendo coisas do
teclado
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 19 / 33
92. Entrada
O ideal seria
trocar mensagens
Escrevendo coisas
na tela
(println())
Lendo coisas do
teclado
Como?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 19 / 33
93. Entrada
O ideal seria
trocar mensagens
Escrevendo coisas
na tela
(println())
Lendo coisas do
teclado
Como? Via
Scanner (Java ≥
5)
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 19 / 33
94. Entrada – Olhando mais de perto
Primeiro temos
que dizer ao
compilador onde
Scanner est´a
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 20 / 33
95. Entrada – Olhando mais de perto
Primeiro temos
que dizer ao
compilador onde
Scanner est´a
Criamos ent˜ao o
objeto Scanner,
que deve ler da
entrada padr˜ao de
nosso programa
(teclado)
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 20 / 33
96. Entrada – Olhando mais de perto
Fazemos a
pergunta...
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 21 / 33
97. Entrada – Olhando mais de perto
Fazemos a
pergunta...
Scanner lˆe o
string digitado
(at´e um enter ser
pressionado)
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 21 / 33
98. Entrada – Olhando mais de perto
Fazemos a
pergunta...
Scanner lˆe o
string digitado
(at´e um enter ser
pressionado)
Recuperamos o
inteiro nesse
string
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 21 / 33
99. Entrada – Olhando mais de perto
Usamos para
inicializar o
objeto da classe
Projeto
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 22 / 33
100. Entrada – Olhando mais de perto
Usamos para
inicializar o
objeto da classe
Projeto
Criamos
residˆencias
padr˜ao no
condom´ınio
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 22 / 33
101. Entrada – Olhando mais de perto
E se o que for
lido n˜ao for o
esperado?
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 23 / 33
102. Entrada – Olhando mais de perto
E se o que for
lido n˜ao for o
esperado?
Um n˜ao inteiro
quando se queria
inteiro, por
exemplo
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 23 / 33
103. Entrada – Olhando mais de perto
E se o que for
lido n˜ao for o
esperado?
Um n˜ao inteiro
quando se queria
inteiro, por
exemplo
Um erro em
tempo de
execu¸c˜ao ocorre
import java.util.Scanner;
class Projeto {
Residencia[] condominio;
...
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Quantas resid^encias h´a no
condom´ınio? ");
String sTotal = entrada.nextLine();
int nRes = Integer.parseInt(sTotal);
Projeto proj = new Projeto(nRes);
for (int i=0; i<nRes; i++) {
Residencia res = new Residencia(
new AreaCasa(),new AreaPiscina());
proj.adicionaRes(res);
}
System.out.println(proj.condominio.length);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 23 / 33
104. Scanner
Scanner pode tamb´em
ser usado para varrer
as informa¸c˜oes em um
string
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 24 / 33
105. Scanner
Scanner pode tamb´em
ser usado para varrer
as informa¸c˜oes em um
string
import java.util.Scanner;
class Teste {
public static void main(String[] args) {
String meuString = "3 tokens 5,3 true";
Scanner sc = new Scanner (meuString);
int i = sc.nextInt();
String str = sc.next();
double d = sc.nextDouble();
boolean b = sc.nextBoolean();
System.out.println(i);
System.out.println(str);
System.out.println(d);
System.out.println(b);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 24 / 33
106. Scanner
Scanner pode tamb´em
ser usado para varrer
as informa¸c˜oes em um
string
Linha de Comando
$ java Teste
3
tokens
5.3
true
import java.util.Scanner;
class Teste {
public static void main(String[] args) {
String meuString = "3 tokens 5,3 true";
Scanner sc = new Scanner (meuString);
int i = sc.nextInt();
String str = sc.next();
double d = sc.nextDouble();
boolean b = sc.nextBoolean();
System.out.println(i);
System.out.println(str);
System.out.println(d);
System.out.println(b);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 24 / 33
107. Scanner
Cuidado com floats e
doubles!
import java.util.Scanner;
class Teste {
public static void main(String[] args) {
String meuString = "3 tokens 5,3 true";
Scanner sc = new Scanner (meuString);
int i = sc.nextInt();
String str = sc.next();
double d = sc.nextDouble();
boolean b = sc.nextBoolean();
System.out.println(i);
System.out.println(str);
System.out.println(d);
System.out.println(b);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 25 / 33
108. Scanner
Cuidado com floats e
doubles!
Depender˜ao do locale
instalado no computador
import java.util.Scanner;
class Teste {
public static void main(String[] args) {
String meuString = "3 tokens 5,3 true";
Scanner sc = new Scanner (meuString);
int i = sc.nextInt();
String str = sc.next();
double d = sc.nextDouble();
boolean b = sc.nextBoolean();
System.out.println(i);
System.out.println(str);
System.out.println(d);
System.out.println(b);
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 25 / 33
110. Busca em Arranjo
Suponha que temos um arranjo de inteiros
Como fazemos para verificar se um determinado
n´umero est´a l´a?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 27 / 33
111. Busca em Arranjo
Suponha que temos um arranjo de inteiros
Como fazemos para verificar se um determinado
n´umero est´a l´a?
Varremos o arranjo, da esquerda para a direita
Se acharmos o n´umero, ent˜ao ele est´a no arranjo
Se chegarmos ao final do arranjo e n˜ao acharmos, ele n˜ao
est´a
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 27 / 33
112. Busca em Arranjo
Suponha que temos um arranjo de inteiros
Como fazemos para verificar se um determinado
n´umero est´a l´a?
Varremos o arranjo, da esquerda para a direita
Se acharmos o n´umero, ent˜ao ele est´a no arranjo
Se chegarmos ao final do arranjo e n˜ao acharmos, ele n˜ao
est´a
Busca Sequencial!
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 27 / 33
113. Busca em Arranjo
Ex: Buscando 15
2
0
12
1
20
2
15
3
23
4
8
5
30
6
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 28 / 33
114. Busca em Arranjo
Ex: Buscando 15
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 28 / 33
115. Busca em Arranjo
Ex: Buscando 15
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 28 / 33
116. Busca em Arranjo
Ex: Buscando 15
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 28 / 33
117. Busca em Arranjo
Ex: Buscando 15
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 28 / 33
118. Busca em Arranjo
Ex: Buscando 15
2
0
12
1
20
2
15
3
23
4
8
5
30
6
Encontrou! ´Indice 3 (quarta posi¸c˜ao).
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 28 / 33
119. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
120. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
121. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
122. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
123. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
124. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
125. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
126. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
127. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
N˜ao encontrou! Como sabemos?
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
128. Busca em Arranjo
E o 16?
2
0
12
1
20
2
15
3
23
4
8
5
30
6
i
N˜ao encontrou! Como sabemos?
i == 7, ou seja, i == tamanho.
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 29 / 33
129. Busca em Arranjo
Ent˜ao...
static int buscaSeq(int[] arr, int el) {
for (int i=0; i<arr.length; i++)
if (arr[i] == el) return(i);
return(-1);
}
public static void main(String[] args) {
int[] v = {9, 8, 4, 6, 3, 4};
System.out.println(buscaSeq(v, 4));
System.out.println(buscaSeq(v, 12));
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 30 / 33
130. Busca em Arranjo
Ent˜ao...
Note que fizemos o
m´etodo static
static int buscaSeq(int[] arr, int el) {
for (int i=0; i<arr.length; i++)
if (arr[i] == el) return(i);
return(-1);
}
public static void main(String[] args) {
int[] v = {9, 8, 4, 6, 3, 4};
System.out.println(buscaSeq(v, 4));
System.out.println(buscaSeq(v, 12));
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 30 / 33
131. Busca em Arranjo
Ent˜ao...
Note que fizemos o
m´etodo static
Ele j´a disp˜oe, em seus
parˆametros, de toda a
informa¸c˜ao de que precisa
para executar
static int buscaSeq(int[] arr, int el) {
for (int i=0; i<arr.length; i++)
if (arr[i] == el) return(i);
return(-1);
}
public static void main(String[] args) {
int[] v = {9, 8, 4, 6, 3, 4};
System.out.println(buscaSeq(v, 4));
System.out.println(buscaSeq(v, 12));
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 30 / 33
132. Busca em Arranjo
Ent˜ao...
Note que fizemos o
m´etodo static
Ele j´a disp˜oe, em seus
parˆametros, de toda a
informa¸c˜ao de que precisa
para executar
N˜ao precisa de nada mais
espec´ıfico de cada objeto
particular
static int buscaSeq(int[] arr, int el) {
for (int i=0; i<arr.length; i++)
if (arr[i] == el) return(i);
return(-1);
}
public static void main(String[] args) {
int[] v = {9, 8, 4, 6, 3, 4};
System.out.println(buscaSeq(v, 4));
System.out.println(buscaSeq(v, 12));
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 30 / 33
133. Busca em Arranjo
Ent˜ao...
Note que fizemos o
m´etodo static
Ele j´a disp˜oe, em seus
parˆametros, de toda a
informa¸c˜ao de que precisa
para executar
N˜ao precisa de nada mais
espec´ıfico de cada objeto
particular
Sendo static, n˜ao h´a
uma c´opia por objeto –
poupa mem´oria
static int buscaSeq(int[] arr, int el) {
for (int i=0; i<arr.length; i++)
if (arr[i] == el) return(i);
return(-1);
}
public static void main(String[] args) {
int[] v = {9, 8, 4, 6, 3, 4};
System.out.println(buscaSeq(v, 4));
System.out.println(buscaSeq(v, 12));
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 30 / 33
134. Busca em Arranjo
Ent˜ao...
Note que fizemos o
m´etodo static
Ele j´a disp˜oe, em seus
parˆametros, de toda a
informa¸c˜ao de que precisa
para executar
N˜ao precisa de nada mais
espec´ıfico de cada objeto
particular
Sendo static, n˜ao h´a
uma c´opia por objeto –
poupa mem´oria
static int buscaSeq(int[] arr, int el) {
for (int i=0; i<arr.length; i++)
if (arr[i] == el) return(i);
return(-1);
}
public static void main(String[] args) {
int[] v = {9, 8, 4, 6, 3, 4};
System.out.println(buscaSeq(v, 4));
System.out.println(buscaSeq(v, 12));
}
Sa´ıda
$ java Projeto
2
-1
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 30 / 33
135. Busca em Arranjo
Como ficaria a busca com objetos?
Ex: busque, no condom´ınio, a primeira casa com piscina de
raio 3
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 31 / 33
136. Busca em Arranjo
Como ficaria a busca com objetos?
Ex: busque, no condom´ınio, a primeira casa com piscina de
raio 3
class Projeto {
Residencia[] condominio;
...
Projeto(int tam) {
condominio = new Residencia[tam];
}
int buscaPiscSeq(double raio) {
for (int i=0;i<this.condominio.length;i++)
if (this.condominio[i].piscina.raio ==
raio) return(i);
return(-1);
}
...
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 31 / 33
137. Busca em Arranjo
Como ficaria a busca com objetos?
Ex: busque, no condom´ınio, a primeira casa com piscina de
raio 3
Note que o m´etodo
agora n˜ao ´e static,
pois efetua a busca
no arranjo de
condom´ınios
do objeto
class Projeto {
Residencia[] condominio;
...
Projeto(int tam) {
condominio = new Residencia[tam];
}
int buscaPiscSeq(double raio) {
for (int i=0;i<this.condominio.length;i++)
if (this.condominio[i].piscina.raio ==
raio) return(i);
return(-1);
}
...
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 31 / 33
138. Busca em Arranjo
class Projeto {
Residencia[] condominio;
...
Projeto(int tam) {
condominio = new Residencia[tam];
}
int buscaPiscSeq(double raio) {
for (int i=0;
i<this.condominio.length; i++)
if (this.condominio[i].piscina.raio
== raio) return(i);
return(-1);
}
public static void main(String[] args)
{
Projeto pr = new Projeto(5);
for (int i=0; i<pr.condominio.length;
i++) {
AreaCasa c = new AreaCasa();
AreaPiscina p =
new AreaPiscina(i+2);
Residencia r = new Residencia(c,p);
pr.adicionaRes(r);
}
System.out.println(
pr.buscaPiscSeq(3));
System.out.println(
pr.buscaPiscSeq(15));
}
}
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 32 / 33
139. Busca em Arranjo
class Projeto {
Residencia[] condominio;
...
Projeto(int tam) {
condominio = new Residencia[tam];
}
int buscaPiscSeq(double raio) {
for (int i=0;
i<this.condominio.length; i++)
if (this.condominio[i].piscina.raio
== raio) return(i);
return(-1);
}
public static void main(String[] args)
{
Projeto pr = new Projeto(5);
for (int i=0; i<pr.condominio.length;
i++) {
AreaCasa c = new AreaCasa();
AreaPiscina p =
new AreaPiscina(i+2);
Residencia r = new Residencia(c,p);
pr.adicionaRes(r);
}
System.out.println(
pr.buscaPiscSeq(3));
System.out.println(
pr.buscaPiscSeq(15));
}
}
Sa´ıda:
$ java Projeto
1
-1
Norton Trevisan Roman Aula 16 – Strings, Entrada e Busca Sequencial 2 de maio de 2020 32 / 33