pessoal estou com dificuldade em exibir os dados do meu arraylist… só consigo visualizar o último elemento! Xele imprime o tamanho correto do array, se tiver 2 elementos no array, por exemplo, será exibido o ultimo elemento 2X.
na minha classe funcionario eu tenho os gets e sets.
alguem pode da uma olhada aí. vlw
segue o codigo:
public class FuncionarioAction {
Funcionario funcionario = new Funcionario() ;
ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
public FuncionarioAction(){
}
public void setFuncionario(Funcionario funcionario){
this.funcionario = funcionario;
}
public Funcionario getFuncionario(){
return funcionario;
}
public List<Funcionario> getFuncionarios(){
return funcionarios;
}
public void salvarFuncionario(Funcionario funcionario){
funcionarios.add(funcionario);
}
public String salvar(){
salvarFuncionario(funcionario);
return "sucess" ;
}
public String listar(){
//listarFuncionarios();
getFuncionarios();
return "secess";
}
public List<Funcionario> listarFuncionarios(){
for(int i=0;i<funcionarios.size();i++){
System.out.println(funcionario.getNome()+", "+funcionario.getCidade()+", "+funcionario.getSexo());
}
return funcionarios;
}
public int tamanhoArray(){
return funcionarios.size();
}
}
Qual método utilizado para imprimir? Afinal de contas, o método listarFuncionarios é para imprimir ou para retornar a lista de funcionários?
Faz assim
public List<Funcionario> listarFuncionarios(){
for(Funcionario funcionario : this.getFuncionarios){
System.out.println(funcionario.getNome()+", "+funcionario.getCidade()+", "+funcionario.getSexo());
}
return funcionarios;
}
Tenta aí
Melhor, mostra aí como você está criando os funcionários e adicionando-os ao array da classe FuncionarioAction.
Acho que vc pode estar dando mole em alguma coisa.
Estou desconfiado disso por causa desse Funcionario funcionario = new Funcionario(); na sua classe.
bruno… fiz a alteração, mas continua exibindo o ultimo elemento…
franciscossouza, o metodo que eu quero que imprima eh o listarFuncionarios… só que nesse metodo to querendo que o retorno seja do tipo Funcionario…
Tenta aí
public List<Funcionario> listarFuncionarios(){
for(int i=0;i<funcionarios.size();i++){
System.out.println(funcionarios.get(i).getNome()+", "+funcionarios.get(i).getCidade()+", "+funcionarios.get(i).getSexo());
}
return funcionarios;
}
[quote=marcosjava]pessoal estou com dificuldade em exibir os dados do meu arraylist… só consigo visualizar o último elemento! Xele imprime o tamanho correto do array, se tiver 2 elementos no array, por exemplo, será exibido o ultimo elemento 2X.
na minha classe funcionario eu tenho os gets e sets.
alguem pode da uma olhada aí. vlw
[/quote]
Por acaso a cada vez que você adicionou um novo funcionário ao ArrayList, você lembrou de ter dado um new Funcionario() antes para criar ele, ou está usando o mesmo objeto sempre?
aqui o codigo de FuncionarioAction, onde tenho meus metodos:
public class FuncionarioAction {
Funcionario funcionario = new Funcionario() ;
ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
public FuncionarioAction(){
}
public void setFuncionario(Funcionario funcionario){
this.funcionario = funcionario;
}
public Funcionario getFuncionario(){
return funcionario;
}
public List<Funcionario> getFuncionarios(){
return funcionarios;
}
public void salvarFuncionario(Funcionario funcionario){
funcionarios.add(funcionario);
}
public String salvar(){
salvarFuncionario(funcionario);
return "sucess" ;
}
public String listar(){
//listarFuncionarios();
getFuncionarios();
return "secess";
}
public List<Funcionario> listarFuncionarios(){
for(int i=0;i<funcionarios.size();i++){
System.out.println(funcionario.getNome()+", "+funcionario.getCidade()+", "+funcionario.getSexo());
}
return funcionarios;
}
public int tamanhoArray(){
return funcionarios.size();
}
e aqui o codigo da classe Main, onde to testando os metodos…
public class Main {
public static void main(String args[] ){
Funcionario f = new Funcionario();
FuncionarioAction fa = new FuncionarioAction();
Scanner scanner = new Scanner(System.in);
System.out.println("tem algum usuario a sr cadastrado?");
String resp = scanner.next();
while(resp.equalsIgnoreCase("sim")){
System.out.println("informe o nome que deseja cadastrar: ");
String nome = scanner.next();
System.out.println("senha ");
String password = scanner.next();
System.out.println("cidade ");
String cidade = scanner.next();
System.out.println("informe o sexo: ");
String sexo = scanner.next();
System.out.println();
f.setNome(nome);
f.setPassword(password);
f.setCidade(cidade);
f.setSexo(sexo);
fa.setFuncionario(f);
//fa.salvarFuncionario(f);
fa.salvar();
System.out.println("desejar cadastrar mais algum? ");
resp = scanner.next();
System.out.println();
}
System.out.println("Tem "+fa.tamanhoArray()+" funcionario cadastrado");
fa.listarFuncionarios();
}
bruno laturner, tentei fazer isso no metodo da classe FuncionarioAction! e os elementos ficam null, mas era pra ter sido feito no main?!?!
Vc tem que dar new em funcionário dentro do while.
Marcos, ele não está imprimindo apenas o último funcionário!
Ele está adicionando na lista duas vezes o mesmo objeto.
Adicione um:
f = new Funcionario();
na linha 19 da classe Main, para que seja gerada uma nova instância.
era isso mesmo!!!
faltava criar uma nova instancia…
estava preocupado em criar nos metodo e nao na classe Main…
vlw a todos pela ajuda!!! Obrigado