Duvida Array List

6 respostas
RodrigoB1

Ola galera, sou novo no forum e estou começando a mexer em Java.

Minha duvida é em relação a ArrayList;

Preciso modificar os dados dentro de uma Classe, usando ArrayList. O problema é assim:

Tenho uma classe chamada Dados, com:

String nome;

char sexo;

int idade;

double altura;

double peso;

Depois de cadastrar um usuario nessa clase, eu preciso altera-lo, mas na hora de puxar os dados, usando o comando lista.set(h, cadastro.nome), o programa (Eclipse) pede para mudar a inicialização do nome de String para Dados…

Alguem ae poderia me ajudar?

6 Respostas

charles.eduardo

RodrigoB., posta os codigos quem sabe pode facilitar para tentar ajudar-lhe!!!

RodrigoB1

Ola charles.eduardo, o problema inical ja consegui corrigir, agora aparece um pior...

No codigo abaixo, no case 3, eu tenho que excluir os dados de determinado cliente (que esta adicionado no ArrayList). Quando tento excluir o cliente no codigo abaixo, ele da um erro:

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at trabalho.TrabalhoBim.main(TrabalhoBim.java:77)

O que posso fazer?

package trabalho;

import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;

class Dados{
	public String nome;
	public char sexo ;
	public int idade;
	public double altura;
	public double peso;
	public int codigo;
}

public class TrabalhoBim {


	public static void main(String[] args) throws IOException {

		Scanner leitura = new Scanner(System.in);
		ArrayList<Dados> lista = new ArrayList<Dados>();

		int i,a,b=0,c=1,d=0,f=0,g=0,h;
		String e;

		while (f==0){

			Dados cadastro = new Dados();
			System.out.println("1-Cadastro \n 2-Alterar dados \n 3-Excluir \n 4-Informações Gerais \n 5-Informação Particular \n 6-Calculo IMC");
			a=leitura.nextInt();

			switch (a){
			case 1:
			
				System.out.print("Digite o nome: ");
			
				cadastro.nome=leitura.next();
				System.out.println("Digite a sua idade");
				cadastro.idade=leitura.nextInt();
				System.out.print("Digite o sexo: ");
				cadastro.sexo = (char)System.in.read();
				System.out.print("Digite a altura: ");
				cadastro.altura = leitura.nextDouble();
				System.out.println("Digite o peso: ");
				cadastro.peso = leitura.nextDouble();
				lista.add(cadastro);
				System.out.println(cadastro.altura);
				System.out.println(cadastro.nome);
				break;
				
			case 2:
				System.out.println("Digite o nome: ");
				e=leitura.next();
				for (Dados h1 : lista){
					if (h1.nome.equals (e)){
					
						System.out.println("Altere o nome: ");
						h1.nome=leitura.next();
						System.out.println("Altere a idade ");
						h1.idade=leitura.nextInt();
						System.out.println("Altere o sexo: ");
						h1.sexo=(char)System.in.read();
						System.out.println("Altere a altura: ");
						h1.altura=leitura.nextDouble();
						System.out.println("Altere o peso: ");
						h1.peso=leitura.nextDouble();
						

					}
				}

				break;
			case 3:
				System.out.println("Digite o nome: ");
				e=leitura.next();
				for (Dados h1 : lista){
					if (h1.nome.equals (e)){
						
						lista.remove(h1);
						}
					}
				break;
			case 4:
				for (Dados cadastro1:lista){
					System.out.println(cadastro1.nome);
					System.out.println(cadastro1.sexo);
					System.out.println(cadastro1.idade);
					System.out.println(cadastro1.altura);
					System.out.println(cadastro1.peso);
				}
				break;
			case 5:
				System.out.println("Digite o nome da pessoa: ");
				e=leitura.next();
				for (Dados h1 : lista){
					if (h1.nome.equals (e)){
						System.out.println(h1.nome);
						System.out.println(h1.idade);
						System.out.println(h1.sexo);
						System.out.println(h1.altura);
						System.out.println(h1.peso);
					}
			}
				break;
			
		}
			System.out.println("Cadastrar outros? 1-Nao 0-Sim");
			f=leitura.nextInt();
	}
}
}
D

Cara isso acontece porque você está removendo o objeto da lista dentro do laço de iteração da própria lista.
tente fazer da seguinte forma, no case 3: coloque:

case 3:  
                boolean flag=false;
                cadastro = new Dados();
                System.out.println("Digite o nome: ");  
                e=leitura.next();  
                for (Dados h1 : lista){  
                    if (h1.getNome().equals(e)){  
                          
                        flag=true;  
                        cadastro =h1;
                        }  
                    
                    }  
                if(flag){
                    lista.remove(cadastro);
                }
                break;
RodrigoB1

danilovteodoro, cara, valeu, funcionou certinho. Obrigado msm.

tectuba

Amigo,

Sempre que você for manipular uma lista, utilize uma lista auxiliar que pode armazenar os dados que devem ser removidos. Você aumenta o nomero
de iterações na lista, porem seu código fica claro, essa é considerada uma boa pratica.

Abraço

RodrigoB1

tectuba, obrigado pela dica. Estou começando a mexer em Java agora, e ainda estou descobrindo os segredos desse mundo fantastico.

Criado 23 de novembro de 2012
Ultima resposta 24 de nov. de 2012
Respostas 6
Participantes 4