boa tarde galera estou com um probleminha em um arraylist
no araylist insiro objetos Contas, na qual possuem nº da conta, senha e saldo, na hora q preciso busca eles, eu preciso q seje pelo num da conta, ai que esta meu problema
o usuario informa o num da conta que quer acessar, porem meu codigo não executa a busca e também não mostra erro.
String contaCons;
int opcOp;
contaCons = JOptionPane.showInputDialog(null,"Qual conta deseja consultar?");
ContaBancaria cb;
for(int ind=0; i < conta.size();ind++){//Percorrer o array
cb = conta.get(ind);
if(cb.getNumConta().equals(contaCons)){//acredito que o erro esteje aqui
//if(cb.equals("cc")){//verifica se e CC ou CP
opcOp = Integer.parseInt(JOptionPane.showInputDialog(null,
"1 - Saque" +
"\n 2 - Deposito" +
"\n 3 - Extrato" +
"\n 4 - Alterar senha"));
}
}
Aproveitando que o tópico é sobre Buscas usando a classe ArrayList, eu tenho um dúvida quanto a isso: quero que o meu programa simplismente retorne o número de vezes que um deterninado valor do objeto ‘String nome’ aparece em uma lista:
Vamos supor que eu digite “renato”. O programa terá que retornar que o nome digitado(“renato”) aparece 2 vezes na lista. Então, como eu posso estar colocando em prática esta lógica? Qual é o melhor método?
[quote=diegogeovani]Aproveitando que o tópico é sobre Buscas usando a classe ArrayList, eu tenho um dúvida quanto a isso: quero que o meu programa simplismente retorne o número de vezes que um deterninado valor do objeto ‘String nome’ aparece em uma lista:
Vamos supor que eu digite “renato”. O programa terá que retornar que o nome digitado(“renato”) aparece 2 vezes na lista. Então, como eu posso estar colocando em prática esta lógica? Qual é o melhor método? [/quote]
Tem um método na classe Collections que faz isso. Se não me engano, ficaria algo como: Collections.frequency(Collection<T> c, Object o)
manolimars, tentei implementar a partir da lógica que você postou anteriormente. regis_hideki, olhei no javadoc sobre a classe Collections, mas não consegui assimilar nada,
nem mesmo com referência a esse tal de Collections.frequency(Collection<T> c, Object o). Por isso tentei implementar do jeito que eu sei:
[code]public class Pessoas {
public static void main(String[] args) {
ArrayList<String> listaPessoa = new ArrayList<String>();
listaPessoa.add("diego");
listaPessoa.add("renato");
listaPessoa.add("leonardo");
listaPessoa.add("livia");
listaPessoa.add("sandro");
listaPessoa.add("diego");
listaPessoa.add("diego");
listaPessoa.add("diego");
listaPessoa.add("diego");
listaPessoa.add("renato");
listaPessoa.add("diego");
listaPessoa.add("sandro");
listaPessoa.add("diego");
listaPessoa.add("livia");
listaPessoa.add("livia");
String nome = JOptionPane.showInputDialog(null,"Digite um nome:","Java",1);
System.out.println(procurarNome(listaPessoa, nome));
}
public static int procurarNome(ArrayList<String> listaPessoa, String nome) {
int quantidade = 0;
//o teste pra verificar se o nome digitado existe na lista é válido
if(! listaPessoa.contains(nome)) {
System.out.println("O nome não existe!");
}else{
//acredito que a estrutura abaixo percorra toda a lista
for(int contador = 0; contador < listaPessoa.size(); contador++) {
//a partir daqui, não consegui implementar como capturar só o nome digitado
}
}
return quantidade;
}
}[/code]
E foi isso. não consegui fazer ainda. Se alguém puder postar um código pra me dar uma luz, ou até mesmo uma ideia melhor ou crítica sobre o método que eu estou utilizando
, eu agradeço
Agradeço a atenção da galera deste tópico também!
O frequency é interessante se vc for usar essa informação uma vez só.
O map que sugeri é bom caso você precise da informação várias vezes, ou precise totalizar todos os elementos dentro da lista. No fundo, ele faz o que o frequency faz, para todos os elementos da lista de uma só vez.
Estou tendo outro problema. Primeiro, tenho essa classe:
public class Lista {
ArrayList<String> lista;
public void preencherLista() {
ArrayList<String> lista = new ArrayList<String>();
lista.add("a"); lista.add("a"); lista.add("a"); lista.add("a");
lista.add("b"); lista.add("b"); lista.add("b"); lista.add("b");
lista.add("b"); lista.add("b"); lista.add("b"); lista.add("c");
lista.add("c"); lista.add("c"); lista.add("d");
}
public void setLista(ArrayList<String> lista) {
this.lista = lista;
}
public ArrayList<String> getLista() {
return lista;
}
}
Depois, em outra classe, há o método abaixo:
public String buscar() {
Lista lista = new Lista();
if(lista.getLista().isEmpty()){
return "Deu merda!";
}else{
return "Há itens na lista";
}
}
E por último, quando executado o método “buscar()” o programa dispara a exceção “NullPointerException”. Pelo o que entendi do Console do Eclipse, o erro ocorre na linha if(lista.getLista().isEmpty())
Então, a lista está vazia(null)? Os métodos “get” & “set” fazem sentido, se tratando de uma coleção String? Como capturar, através do objeto :“Lista”, os elementos inseridos nela?
Realmente ViniGodoy! Escrevi a linha “List<String> lista = new ArrayList<String>();” fora do método “preencherLista()”, e o programa não disparou a exceção. Entretanto, no teste
[code] if(lista.getLista().isEmpty()){
return “Vazio!”;
}else{
return "Há itens na lista";
} [/code]o retorno foi[b] "vazio!"[/b]. Testando, declarei o objeto [b]"lista"[/b] como [b]static[/b], alterando os modos de acesso. Aí sim, o retorno foi [b]"Há itens na lista"[/b]. Está aí minha dúvida: por que como [b]static[/b] o retorno foi outro? Nunca conseguir entender plenamente esse conceito! Valeu o apoio mano!
Agora entendi, ViniGodoy. Enfim, verifiquei as soluções que o pessoal postou aqui. Não consegui entender a classe Map e sua lógica, mas vou estudar mais a frente. O método Collections.frequency() faz exatamente o que eu questionei anteriormente: retorna o número de elementos existentes em uma coleção, que sejam iguais ao objeto em questão. É um código de alto nível, mas eu entendi também como funciona a contagem, o que mais importa. Valeu mesmo pessoal. 8)