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.
StringcontaCons;intopcOp;contaCons=JOptionPane.showInputDialog(null,"Qual conta deseja consultar?");ContaBancariacb;for(intind=0; i < conta.size();ind++){//Percorrer o arraycb=conta.get(ind);if(cb.getNumConta().equals(contaCons)){//acreditoqueoerroestejeaqui//if(cb.equals("cc")){//verificaseeCCouCPopcOp=Integer.parseInt(JOptionPane.showInputDialog(null,
"1 - Saque"+"\n 2 - Deposito"+"\n 3 - Extrato"+"\n 4 - Alterar senha"));}
}
o que é ind e o que é i?
acho que você errou o nome da variável ‘-’
B
Benmaluco
caramba passei a tarde procurando erro nessa parte e nem notei isso, agora rodou certinho, vlw
Mephy
Benmaluco:
caramba passei a tarde procurando erro nessa parte e nem notei isso, agora rodou certinho, vlw
de nada n.n
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:
ArrayList<String>listaPessoa=newArrayList<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");Stringnome=JOptionPane.showInputDialog(null,"Digite seu nome:","Java",1);
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?
manolimars
Ficaria mais ou menos assim:
cria um método que recebe como parâmetro a String a ser procurada e retorne um Int.
inicia uma variável Int “quantidade” com valor zero.
faz um loop para percorrer todas as posiçoes do array
a cada volta no loop faz uma verificação,“se existe o nome a ser procurado nesta posição, incrementa a variável quantidade”
após percorrer todas as posições do array, dá um return na variável quantidade.
diegogeovani
manolimars:
Ficaria mais ou menos assim:
cria um método que recebe como parâmetro a String a ser procurada e retorne um Int.
inicia uma variável Int “quantidade” com valor zero.
faz um loop para percorrer todas as posiçoes do array
a cada volta no loop faz uma verificação,“se existe o nome a ser procurado nesta posição, incrementa a variável quantidade”
após percorrer todas as posições do array, dá um return na variável quantidade.
Obrigado manolimars. Vou tentar implementar isto. Depois eu posto a resposta.
regis_hideki
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:
ArrayList<String>listaPessoa=newArrayList<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");Stringnome=JOptionPane.showInputDialog(null,"Digite seu nome:","Java",1);
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?
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)
diegogeovani
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:
publicclassPessoas{publicstaticvoidmain(String[]args){ArrayList<String>listaPessoa=newArrayList<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");Stringnome=JOptionPane.showInputDialog(null,"Digite um nome:","Java",1);System.out.println(procurarNome(listaPessoa,nome));}publicstaticintprocurarNome(ArrayList<String>listaPessoa,Stringnome){intquantidade=0;//o teste pra verificar se o nome digitado existe na lista é válidoif(!listaPessoa.contains(nome)){System.out.println("O nome não existe!");}else{//acredito que a estrutura abaixo percorra toda a listafor(intcontador=0;contador<listaPessoa.size();contador++){//a partir daqui, não consegui implementar como capturar só o nome digitado}}returnquantidade;}}
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 :D
Agradeço a atenção da galera deste tópico também!
ViniGodoy
Basta somar tudo usando um map:
Map<String,Integer>map=newTreeMap<String,Integer>();for(Stringnome:listaPessoa){if(!map.contains(nome)){map.put(nome,0);map.put(nome,map.get(nome)+1);}for(Map.Entry<String,Integer>entry:map.entrySet()){System.out.printf("%s aparece %d vezes",entry.getKey(),entry.getValue();}
ou, usando Collections, seu método ficaria bem simples:
public static int procurarNome(ArrayList<String> listaPessoa, String nome) {
return Collections.frequency(listaPessoa, nome);
}
ViniGodoy
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.
claudneto
Usando o que vc mesmo criou, vc coloca um if com a condição de achar o nome, somar no quatidade:
for(intcontador=0;contador<listaPessoa.size();contador++){//a partir daqui, não consegui implementar como capturar só o nome digitado if(listaPessoa.get(contador).compareTo("String que vc queira comparar")==0){quatidade++;}}
diegogeovani
Valeu mesmo gente, vou tentar implementar todos esses metodos possíveis. Quando eu puder, eu posto a resposta.
Abraço.
diegogeovani
Estou tendo outro problema. Primeiro, tenho essa classe:
publicStringbuscar(){
Listalista=newLista();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?
Obrigado pela paciência de todos!
ViniGodoy
E porque não deveria dar? Você criou uma nova lista, não chamou o setLista e já chamou o getLista direto.
Se não quer que dê null pointer, você precisa criar uma lista, mesmo que vazia:
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
if(lista.getLista().isEmpty()){return"Vazio!"; }else{return"Há itens na lista"; }
o retorno foi "vazio!". Testando, declarei o objeto "lista" como static, alterando os modos de acesso. Aí sim, o retorno foi "Há itens na lista". Está aí minha dúvida: por que como static o retorno foi outro? Nunca conseguir entender plenamente esse conceito! Valeu o apoio mano!
ViniGodoy
Você retirou a segunda declaração da lista de dentro do método preencherLista como eu fiz?
Pq senão, vc terá duas listas com o mesmo nome. Uma dentro do método, outra fora.
Preencher a de dentro não fará com que a de fora fique preenchida.
diegogeovani
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)
acbit
.
zicky23
Estou com um problema em relação a busca no arraylist, espero que vcs me deem uma luz
carreguei os dados em uma arraylist do db.
ai no FieldPesquisakeyreleased qro q ao digitar uma letra ele percorra o arraylist e vá encontrando a linha q tenha o q digitei... e vá selecionando em uma JTable. tem como?
segue a arraylist
//aki quero q cada vez que eu digitar uma letra gostaria que fosse selecionando uma linha, mas não ta funcionando. privatevoidFieldPesquisaKeyReleased(java.awt.event.KeyEventevt){// TODO add your handling code here: Stringpesquisa=FieldPesquisa.getText();List<Servicos>resultados=newArrayList<Servicos>();for(Servicosp:lista2){if(p.getNomeContrib().startsWith(pesquisa)){resultados.add(p);}}}