[RESOLVIDO] Duvida na impressão do objeto dentro do ArrayList

7 respostas
R

Olá pessoal boa tarde.
Estou com um problema e ao mesmo tempo duvida porque não estou sabendo onde estou errando. Alguem poderia me ajudar a encontrar o erro, e indicar o que estou fazendo de errado.

Criei uma classe principal ProjetoBiblioteca e outras classe Livro e Biblioteca.
Estou adicionando um metodo set / get, fazendo o contrutor e enviando os objetos para um array.
O problema é quando imprimo pelo System.out.println(lista); é impresso no console [lixo de memoria]…acho q deve ser lixo.
estou colocando o codigo ai, se alguem puder ajudar.
valeu

package bibliotecalivro;

import java.util.ArrayList;

/**
 *
 * @author ricardo
 */

//construtor automatico botao direito -> inserir codigo
public class Biblioteca {
        
    public Biblioteca() {
    }
    
        
    private ArrayList<Livro> lista = new ArrayList<Livro>();
    
    
    
    public void addlivro(Livro nome_livro){
       lista.add(nome_livro);
    }
    
    public void listaBiblioteca(){        
        for(int i=0; i<lista.size(); i++){
            System.out.println(lista.get(i));
        }
    }
    
}
package bibliotecalivro;

/**
 *
 * @author ricardo
 */

// + publico
// - privado

//o Livro dos codigos, simon sing

public class Livro {
    
    
    private String titulo;
    private String autor;
    private int id;

    public Livro(String titulo, String autor, int id) {
        this.titulo = titulo;
        this.autor = autor;
        this.id = id;
    }
                    
        
    public void setTitulo(String titulo){
     
        this.titulo = titulo;
    }
    
    public String getTitulo(){
        return this.titulo;
    }
    
    public void setAutor(String autor){
        this.autor = autor;                
    }
    
    public String getAutor(String autor){
        return this.autor;
    } 
    
    public void setId(int id){
        this.id = id;
    }
    
    public int getId(int id){
        return this.id;
    }   
        
    
    
}
package bibliotecalivro;


/**
 *
 * @author ricardo
 */
public class ProjetoBiblioteca {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        
        
        Livro livro1 = new Livro("Ricardo","Rita",12344);
        Livro livro2 = new Livro("O caçador de pipas ", "The king ", 122332);
        Livro livro3 = new Livro("awt", "teste", 33443);
        
        
        System.out.println(livro1);
        
        Biblioteca adcionar = new Biblioteca();
               
        
        adcionar.addlivro(livro1);
        adcionar.addlivro(livro2);
        adcionar.addlivro(livro3);
        
        adcionar.listaBiblioteca();
        
        
    }
}

7 Respostas

F

Sobrescreva o método toString() da tua classe Livro, fazendo com que ela retorne o(s) dado(s) de Livro que você quer que seja exibido.

diego.sas

Boa tarde Ricardo.

Oque está sendo impresso é o endereço de memória…
Para ser impresso os valores que foram atribuidos ao livro:

public void listaBiblioteca(){           
        for(int i=0; i<lista.size(); i++){   
            System.out.println(lista.get(i).getTitulo + " " + lista.get(i).getAutor);   
        }   
    }

Ou você pode sobreescrever o método toString na classe Livro .
Flw

F

Você pode sobreescrever o método toString na classe Livro.
Algo assim:

public String toString() {
    String s = "Autor: " + getAutor() + "\nLivro: " + getNomeLivro; // E todo o resto que vc quiser
    return s;
}

Aí quando for imprimir:

System.out.println(lista.get(i).toString());

Acho que funciona haha

F

Olá ricardokamada!

Quando você dá um sysout num objeto por padrão será invocado o método toString() desse objeto. Esse método é herdado da classe Object e caso você não o sobrescreva será impresso o endereço do objeto no heap (e não sujeira de memória como disse). O que você deve fazer é sobrescrever o método toString() na sua classe Vou dar um exemplo:

public class Cliente {
	
	private String id;
	
	private String nome;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String toString() {
		return id + " => " + nome;
	}
}

//Quando esse código for executado invocará o método toString da classe Cliente
Cliente c = new Cliente();
c.setId(1);
c.setNome("Fabricio");
System.out.println(c);
adriano_si

Gente, cuidado com a dica de pedir para que sobrescrevam o método toString()

O amigão precisa entender o porque de fazer isso.

Sobrescrever o método toString somente quando isso for realmente lhe dá uma vantagem.

Se acostume a chamar a propriedade que você quer exibir do Objeto. Sobrescreva toString somente quando entender bem Objetos Java e quando for estritamente necessário.

Eu nunca precisei sobrescrever toString em toda minha carreira Java… E lá se vão alguns anos.

Abs []

R

Valeu pessoal !!! consegui entender e resolver com a ajuda de vocês.

Muito obrigado a todos =]

diego.sas

Inclua [RESOLVIDO] no título do tópico…
abraços

Criado 6 de março de 2012
Ultima resposta 6 de mar. de 2012
Respostas 7
Participantes 6