Galera, tô aprendendo java, recebi um Exercício pra estudar sobre como funciona e usar ArrayList, dai tive alguns problemas:
Se eu tentar copilar o programa do jeito que está ai, o erro é o seguinte:
“Note: Agenda.java uses unchecked or unsafe operations
Note: Recompile with -Xlint:unchecked for details.”
Se eu mudar a linha ArrayList l = new ArrayList();
para ArrayList l = new ArrayList();
(que eu não faço ideia do pra quê dos ele dá o seguinte erro:
“Agenda.java:34: cannot find symbol
symbol : method add(Contato)
location: interface java.util.List<java.lang.String>
l.add(new Contato(nome,telefone,email,site));”
Espero que possam me ajudar e tirar minhas dúvidas [=
Segue o código:
import java.util.ArrayList;
import java.util.*;
public class Agenda {
public static void main (String[] args) {
Scanner sc=new Scanner (System.in);
System.out.println ("Bem Vindo à Agenda!");
System.out.println (" ");
System.out.println ("O que deseja fazer?");
System.out.println ("1 - Adicionar Contato.");
System.out.println ("2 - Editar Contato.");
System.out.println ("3 - Remover Contato.");
System.out.println ("4 - Buscar Contato.");
System.out.println ("5 - Exibir Relação Completa.");
System.out.println ("0 - Sair do Programa.");
System.out.println (" ");
System.out.print ("Opção: ");
int o = sc.nextInt();
ArrayList l = new ArrayList();
while (o!=0) {
switch(o) {
case 1: {
System.out.println (" ");
System.out.print ("Digite o Nome do Contato: ");
String nome=sc.nextLine();
System.out.print ("Digite o Telefone de " + nome + ":");
String telefone=sc.nextLine();
System.out.print ("Digite o Email de " + nome + ":");
String email=sc.nextLine();
System.out.print ("Digite o Site de " + nome + ":");
String site=sc.nextLine();
l.add(new Contato(nome,telefone,email,site));
break;
}
case 5: {
Iterator i = l.iterator();
while (i.hasNext()) {
Contato a = (Contato) i.next();
System.out.println(a.getNome());
}
break;
}
}
}
System.out.println ("Programa Encerrado!");
}
}
Aqueles “<” e “>” servem pra dizer que tipo que vai ser inserido dentro do ArrayList. No seu caso, você não colocou nada, mas você adiciona Contato. Então troque
[quote=Andre Brito]Aqueles “<” e “>” servem pra dizer que tipo que vai ser inserido dentro do ArrayList. No seu caso, você colocou String, mas você adiciona Contato. Então troque
ArrayList<String>
por
ArrayList<Contato>
aaaaaaaaaa, então o ArrayList serve para declarar o que ele vai conter…
o programa copilou, eu vou ter que sair agora pra ir pra faculdade sem poder testar tudo, mas logo venho aqui postar se funcionou direitinho.
Muito Obrigado!
Note que seu método get vai retornar um contato e não um object, o que evita cast:
//Sem dizer o tipo do ArrayList
Contato c = (Contato) arrayDeContato.get(10);
//Depois de dizer o tipo usando < >
Contato c = arrayDeContato.get(10);
O java também não vai deixar vc inserir coisas inválidas, nem por acidente:
//Sem dizer o tipo do ArrayList
arrayDeContato.add(cachorro); //Deixa fazer :(
//Depois de dizer o tipo usando < >
arrayDeContato.add(cachorro); //Erro de compilação. Cachorro não é um contato
beleza, obrigado a todos pela ajuda, funcionou perfeitamente [=
alguém poderia me dizer mais ou menos como fazer uma busca no ArrayList só pelo começo do nome?
por exemplo:
else if (o==2) {
sc.nextLine();
System.out.print ("Digite o Nome do Contato que deseja buscar: ");
String b=sc.nextLine();
Iterator i = l.iterator();
while (i.hasNext()) {
Contato a = (Contato) i.next();
if (b.equals(a.getNome())) {
System.out.println (" ");
System.out.println ("Nome: " + a.getNome() + ". - Telefone: " + a.getTelefone() + ".");
}
}
}
com isso eu consigo buscar pelo nome todo, queria saber uma maneira de eu buscar por “J” e ele exibir todos os nomes que comecem com o J, e assim por diante
se puderem me ajudar em mais essa fico grato (de novo) [=
Para que vc entenda realmente seu codigo, estude coleção e generico…
Ate mais…
sua outra duvida:
Use o comando “like”
Na verdade eu tenho um metodo que tem como argumento uma String chamada pesquisa, ou seja meu metodo agurda uma string para executar a pesquisa, quando o usuario digitar por exemplo a letra “C”, todos os nomes que começarem com esta letra sera retornados…
rs = st.executeQuery(“Select * from pessoa where nome like '”+pesquisa+"%’");
Na verdade acredito que isso não seja um erro, é só um um warning, ele compila o código assim mesmo do jeito que está. Porém permite que você adicione qualquer tipo de objeto a ArrayList, ou no caso de utilizar o , permite apenas objetos String, ou objetos que extendam String, e como o objeto Contato não se enquadra nisso, gera um erro de verdade no segundo caso.
A busca pelo nome terá que ser feita manualmente mesmo. Mas as funções de busca, numa lista sequencial não-ordenada, são muito simples. Seguem o seguinte modelo:
public Contato buscaPeloNome(String nome) {
for (Contato contato : l) {
if (contato.getNome().equals(nome)) {
return contato;
return null;
}