12
respostas

Aula 5

Pessoal,

Tentei seguir os passos pelo vídeo, pela explicação e pelos exercícios, mas ao sobrescrever o equals e o hashCode de Gasto e de Funcionário, 3 resultados repetidos continuam sendo impressos, da mesma forma que acontecia antes da edição. Onde estou errando?

Segue o código

package br.com.caelum.empresa.modelo;

import java.util.Calendar;

public class Gasto {

    private double valor;
    private String tipo;
    private Funcionario funcionario;
    private Calendar data;

    public Gasto(double valor, String tipo, Funcionario funcionario,
            Calendar data) {
        super();
        this.valor = valor;
        this.tipo = tipo;
        this.funcionario = funcionario;
        this.data = data;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((data == null) ? 0 : data.hashCode());
        result = prime * result + ((funcionario == null) ? 0 : funcionario.hashCode());
        result = prime * result + ((tipo == null) ? 0 : tipo.hashCode());
        long temp;
        temp = Double.doubleToLongBits(valor);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }



    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Gasto other = (Gasto) obj;
        if (data == null) {
            if (other.data != null)
                return false;
        } else if (!data.equals(other.data))
            return false;
        if (funcionario == null) {
            if (other.funcionario != null)
                return false;
        } else if (!funcionario.equals(other.funcionario))
            return false;
        if (tipo == null) {
            if (other.tipo != null)
                return false;
        } else if (!tipo.equals(other.tipo))
            return false;
        if (Double.doubleToLongBits(valor) != Double.doubleToLongBits(other.valor))
            return false;
        return true;
    }



    @Override
    public String toString() {
        return tipo + " do " + funcionario;
    }

    public double getValor() {
        return valor;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public Calendar getData() {
        return data;
    }

    public void setData(Calendar data) {
        this.data = data;
    }

}
package br.com.caelum.empresa.modelo;

import java.util.Calendar;

public class Funcionario {
    private String nome;
    private int matricula;
    private Calendar dataNascimento;

    public Funcionario(String nome, int matricula, Calendar dataNascimento) {
        this.nome = nome;
        this.matricula = matricula;
        this.dataNascimento = dataNascimento;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((dataNascimento == null) ? 0 : dataNascimento.hashCode());
        result = prime * result + matricula;
        result = prime * result + ((nome == null) ? 0 : nome.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Funcionario other = (Funcionario) obj;
        if (dataNascimento == null) {
            if (other.dataNascimento != null)
                return false;
        } else if (!dataNascimento.equals(other.dataNascimento))
            return false;
        if (matricula != other.matricula)
            return false;
        if (nome == null) {
            if (other.nome != null)
                return false;
        } else if (!nome.equals(other.nome))
            return false;
        return true;
    }



    @Override
    public String toString() {
        return "Funcionario: " + nome;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getMatricula() {
        return matricula;
    }

    public void setMatricula(int matricula) {
        this.matricula = matricula;
    }

    public Calendar getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Calendar dataNascimento) {
        this.dataNascimento = dataNascimento;
    }
}
package br.com.caelum.empresa.leitor;

import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Scanner;

import br.com.caelum.empresa.modelo.Funcionario;
import br.com.caelum.empresa.modelo.Gasto;

public class ImportadorDeGastos {

    private SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");

    public Collection<Gasto> importa(InputStream entrada) throws ParseException {
        Scanner leitor = new Scanner(entrada);
        Collection<Gasto> gastos = new LinkedHashSet<Gasto>();

        while (leitor.hasNextLine()) {
            String line = leitor.nextLine();
            String tipoDeGasto = line.substring(0, 6);
            String dataGastoTxt = line.substring(6, 14);
            String valorTxt = line.substring(14, 23);
            String matriculaTxt = line.substring(23, 26);
            String nome = line.substring(26, 56);
            String dataNascTxt = line.substring(56);

            double valor = Double.parseDouble(valorTxt);
            int matricula = Integer.parseInt(matriculaTxt);

            Calendar dataNascimento = converteDataTxtParaCalendar(dataNascTxt);

            Calendar dataDespesa = converteDataTxtParaCalendar(dataGastoTxt);

            Funcionario funcionario = new Funcionario(nome, matricula,
                    dataNascimento);
            gastos.add(new Gasto(valor, tipoDeGasto, funcionario, dataDespesa));
        }
        return gastos;
    }

    private Calendar converteDataTxtParaCalendar(String dataNascTxt)
            throws ParseException {
        Calendar dataNascimento = Calendar.getInstance();
        dataNascimento.setTime(df.parse(dataNascTxt));
        return dataNascimento;
    }
}
package br.com.caelum.empresa;

import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.Collection;

import br.com.caelum.empresa.leitor.ImportadorDeGastos;
import br.com.caelum.empresa.modelo.Gasto;

public class TesteImportador {

    public static void main(String[] args) throws UnsupportedEncodingException,
            ParseException {
        String conteudo = 
                "CARTAO01012011000010000123Jose da Silva                 22071983\r\n" +
                "CARTAO01012011000010000123Jose da Silva                 22071983\r\n" +
                "CARTAO01012011000010000123Jose da Silva                 22071983\r\n";

        ImportadorDeGastos importador = new ImportadorDeGastos();

        Collection<Gasto> list = importador.importa(new ByteArrayInputStream(
                conteudo.getBytes("UTF-8")));

        for (Gasto gasto : list) {
            System.out.println(gasto);
        }
    }
}
12 respostas

Comigo ocorreu o mesmo problema. Segui tudo exatamente como o vídeo exibiu, porém, o código seguiu gerando três resultados.

Criei um outro projeto e reescrevi o projeto, aproveitando para praticar os atalhos e funcionou conforme esperado. Talvez dê certo para você, Lucas.

Oi, Rodrigo! Eu quero identificar o erro no projeto, mas tá difícil... Você reescreveu qual arquivo? Todos?

Quando eu baixei o arquivo do projeto e importei, devo ter feito algo de errado... Na pasta do projeto, no Eclipse, ficava um exclamação vermelho... Percebi que mesmo deixando TODO o código de TODAS classes como comentado, o código rodava e o mesmo resultado aparecia (os três valores iguais).

Criei um novo projeto, classe por classe e fui copiando e colando o código, sem importar ou colar os arquivos do download na pasta do eclipse... Agora deu certo...

Problema resolvido, mas eu queria saber o motivo de ter ocorrido isso.

Pessoal... O arquivo disponível pra download está certo? Se sim, eu tenho que instalar algo de novo na máquina antes de importar esse projeto?

Eu já tentei de tudo e verifiquei que o seguinte erro aparece:

Description    Resource    Path    Location    Type
Project 'fj15-empresa' is missing required library: '\home\silviomm\Downloads\hibernate-jpa-2.0-api-1.0.0.Final.jar'    fj15-empresa        Build path    Build Path Problem

Como o projeto não roda, não consigo dar continuidade nas aulas.

Percebi isso, mas ainda não tive tempo de fazer... segue até o módulo JPA . https://cursos.alura.com.br/course/jpa

Mas aí ele sugere outro curso antes desse. O "Java e JDBC: Trabalhando com um banco de dados". Não queria quebrar a sequência do curso que eu tava fazendo.

Você conseguiu concluir esse curso do Eclipse?

Na verdade estou seguindo na sequência como você e estou fazendo umas pesquisas fora também para tentar resolver... Assim que descobrir o componente eu posto aqui

Me responde uma coisa, a pasta DAO aparece no projeto que você importou?

Aparece! Dentro dela tem as classes GastoDAO e JPAUtil

Pessoal, estou com o mesmo problema, alguém já conseguiu descobrir o que houve de errado?

Olá pessoal. Eu fiz hoje os exercício e todos executaram conforme o esperado.

Esse curso não exige que façamos o de JDBC antes não pois estamos somente usando atalhos da IDE, e não estamos nos preocupando muito com as implementações, até porque existem outros cursos mais focados.

Para quem estava com problema de bibliotecas, hoje eu baixei a projeto e o importei ao meu workspace e funcionou normalmente. Tentem fazer o download novamente, talvez eles esqueceram de adicionar a lib no projeto na época que vocês estavam fazendo o curso.

Reparem que ao importar o projeto para o workspace, existirá uma pasta chamada lib. Dentro dessa pasta está a especificação javaee. E também existirá a referência, dessa mesma lib, no build path da aplicação.

Segue o print do meu projeto: http://pt-br.tinypic.com/r/2qu17pl/9

Espero ter ajudado vocês, Abs e bom estudos. :)

Deu o mesmo problema aqui. Como foi dito mais acima, eu criei um projeto novo e copiei a pasta "br" para dentro do "src" e agora funciona como esperado.

E para o exemplo seguinte, copiei a lib e adicionei ela ao build path.