Como encontrar o indice de um objeto que está dentro de um arraylist usando IndexOf?

7 respostas
S

public class Cliente {

private String nome;
private String endereço;
private String cpf;
private int idade;
private Conta conta_1;
private Conta contaAdicional_2;

//não coloquei os gets/sets para ficar facil de vcs verem

}

tenho um array list chamando cli e dentro dele guardei varios objetos da classe Cliente. como posso pesquisar os indices de cada objeto pelo nome utilizando o indexOf??

7 Respostas

E

sobreescreve o equals com o atributo nome

S
Já tinha feito isso, mas o indice sempre retorna -1... vou colocar a parte do meu código
public static void editarCliente()
	{  
		 Scanner sc = new Scanner(System.in); 
	     int op_1,op_2=0,op_3 = 0;
	     while(op_2!=2)
	     
	     {
	    	 
	     
		 System.out.println("Digite uma das opções abaixo");  
         System.out.println("----------------------------");  
         System.out.println("1 - Pesquisar Clientes");  
         System.out.println("2 - voltar");  
         op_2=sc.nextInt();
           
		if(op_2==1)
		{
Iterator<Cliente> busca = cli.iterator(); 
		while (busca.hasNext()){       //resolveu o problema de reconhecer o primeiro da lista
		Cliente clienteBusca = (Cliente)busca.next();  
		
		 
		System.out.println("Digite o nome do cliente");
		String nomeBusca;
		nomeBusca=sc.next();
		
		if(clienteBusca.getNome().equals(nomeBusca)) {
			//string dentro do indice
			System.out.println(clienteBusca.getNome()+" Está cadastrado!");
			int indice = cli.indexOf(nomeBusca); 
			System.out.println(indice+" indice"); //verificar pq ta dando -1
			System.out.println(" Desejá alterar dados deste cliente? (1-sim) (2-não)");
			op_1=sc.nextInt();

//...............................
E

coloca sua classe cliente com o
equal e hascode ai

mais vc tem que fazer assim

int indice = cli.indexOf(clienteBusca);

você tem que passar o objeto cliente como parametro indexof da lista de Clientes

S

Cara valeu, deu certo aqui!!

S

Deu certo a principio, mas só estou encontrando o 1° nome cadastrado na lista, para encontrar o 2° nome vai aparecer que o cliente não está cadastrado, ai coloco o nome de novo e ele aparece como cadastrado, o mesmo acontece com o 3° cliente , apos a 3° tentativa ele encontra o nome cadastrado e assim por diante...
é como se o iterator só chegasse na conta que está na lista, depois que o laço terminasse, alguem sabe oq está acontecendo??

public static void editarCliente()
	{  
		
		 Scanner sc = new Scanner(System.in); 
	     int op_1,op_2=0,op_3;
	     while(op_2!=2)
	     
	     {
	    	 
	     
		 System.out.println("Digite uma das opções abaixo");  
         System.out.println("----------------------------");  
         System.out.println("1 - Pesquisar Clientes pelo nome completo");  
         System.out.println("2 - voltar");  
         op_2=sc.nextInt();
         
         sc.nextLine();// alternativa para esvaziar o buffer do teclado
           
		if(op_2==1)
		{
		
		
		Iterator<Cliente> busca = cli.iterator(); 
		System.out.println("Digite o nome do cliente");
		String nomeBusca;
		
		while (busca.hasNext()){       
		Cliente clienteBusca = (Cliente)busca.next();  
		
	
	
		
		
		nomeBusca=sc.nextLine();
		
		if(clienteBusca.getNome().equals(nomeBusca)) { //compa
			
			System.out.println("Está cadastrado!");
			int indice = cli.indexOf(clienteBusca); 
			
			System.out.println(" Desejá alterar dados deste cliente? (1-sim) (2-não)");
			op_1=sc.nextInt();
nel

É sempre importante ler sobre a API no qual trabalha, principalmente se conhece pouco sobre a mesma.
Interface List: http://docs.oracle.com/javase/7/docs/api/java/util/List.html
Método indexOf(Object o): http://docs.oracle.com/javase/7/docs/api/java/util/List.html#indexOf(java.lang.Object)

Essa parte é crucial:

Returns the index of the first occurrence of the specified element in this list…

A primeira ocorrência…entendeu ? :slight_smile:

S
if(clienteBusca.getNome().equals(nomeBusca)) { //compa  
              
            System.out.println("Está cadastrado!");

Meu problema ta aqui, é antes do indexOf, acontece que ele só compara o nomeBusca para o primeiro objeto da lista, para o segundo e em diante só compara depois de digitar 2 vezes em diante(no caso depois 2 laços do while)...

no console fica assim:

Digite uma das opções abaixo
----------------------------
1 - Pesquisar Clientes pelo nome completo
2 - voltar
1
Digite o nome do cliente
a
Não está cadastrado!
Digite o nome do cliente
a
Está cadastrado!
Desejá alterar dados deste cliente? (1-sim) (2-não)

Criado 1 de abril de 2012
Ultima resposta 2 de abr. de 2012
Respostas 7
Participantes 4