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…
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?
packagetrabalho;importjava.io.IOException;importjava.util.Scanner;importjava.util.ArrayList;classDados{publicStringnome;publiccharsexo;publicintidade;publicdoublealtura;publicdoublepeso;publicintcodigo;}publicclassTrabalhoBim{publicstaticvoidmain(String[]args)throwsIOException{Scannerleitura=newScanner(System.in);ArrayList<Dados>lista=newArrayList<Dados>();inti,a,b=0,c=1,d=0,f=0,g=0,h;Stringe;while(f==0){Dadoscadastro=newDados();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){case1: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;case2:System.out.println("Digite o nome: ");e=leitura.next();for(Dadosh1: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;case3:System.out.println("Digite o nome: ");e=leitura.next();for(Dadosh1:lista){if(h1.nome.equals(e)){lista.remove(h1);}}break;case4:for(Dadoscadastro1: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;case5:System.out.println("Digite o nome da pessoa: ");e=leitura.next();for(Dadosh1: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
danilovteodoro
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:
case3:booleanflag=false;cadastro=newDados();System.out.println("Digite o nome: ");e=leitura.next();for(Dadosh1:lista){if(h1.getNome().equals(e)){flag=true;cadastro=h1;}}if(flag){lista.remove(cadastro);}break;
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.