Busca no ArrayList

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"));
                                                  }
                                           }

o que é ind e o que é i?
acho que você errou o nome da variável ‘-’

caramba passei a tarde procurando erro nessa parte e nem notei isso, agora rodou certinho, vlw

[quote=Benmaluco]
caramba passei a tarde procurando erro nessa parte e nem notei isso, agora rodou certinho, vlw[/quote]

de nada n.n

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:

[code] ArrayList listaPessoa = new ArrayList();

	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 seu nome:","Java",1);

[/code]

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?

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.

[quote=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.[/quote]

Obrigado manolimars. Vou tentar implementar isto. Depois eu posto a resposta.

[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:

[code] ArrayList listaPessoa = new ArrayList();

	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 seu nome:","Java",1);

[/code]

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 :smiley:
Agradeço a atenção da galera deste tópico também!

Basta somar tudo usando um map:

[code]Map<String, Integer> map = new TreeMap<String, Integer>();
for (String nome : 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();
}
[/code]

você pode colocar dentro do seu for:

if(listaPessoa.get(contador).equals(nome)){ quantidade++; }

ou, usando Collections, seu método ficaria bem simples:

public static int procurarNome(ArrayList<String> listaPessoa, String nome) { return Collections.frequency(listaPessoa, nome); }

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.

Usando o que vc mesmo criou, vc coloca um if com a condição de achar o nome, somar no quatidade:

[code]for(int contador = 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++;
            }
        }[/code]

Valeu mesmo gente, vou tentar implementar todos esses metodos possíveis. Quando eu puder, eu posto a resposta.
Abraço.

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?

Obrigado pela paciência de todos! :smiley:

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:

[code]public class Lista {
List lista = new ArrayList();

public void preencherLista() {
	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 List<String> getLista() {
	return lista;
}	

}[/code]

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!

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.

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)

.