Problema ao Listar um ArrayList!

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! :slight_smile:
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