12
respostas

CONTINUAM OS CODIGOS QUE NAO FUNCIONAM!!!

COPY-PASTE, nao funciona, o eclipse ja reclama do .nome e sugere um get, mas ai nao funciona na execucao, quando vc invoca o metodo, que é o proximo topico de CODIGO NAO FUNCIONA.

Alguem pode explicar porque?

    @Override
    public boolean equals(Object obj) {
        Aluno outroAluno = (Aluno) obj;
        return this.nome.equals(outroAluno.nome);
    }

Reflexao: alguem aprende a programar de verdade nestes cursos?

12 respostas

Falai Yaco, tudo bem com vc?

Poderia postar o código completo da classe Aluno, para eu entender melhor o seu problema?

;)

package br.com.alura;

public class Aula implements Comparable<Aula> {

    private String titulo;
    private int tempo;

    public Aula(String titulo, int tempo) {
        this.titulo = titulo;
        this.tempo = tempo;
    }

    public String getTitulo() {
        return titulo;
    }

    public int getTempo() {
        return tempo;
    }

    @Override
    public String toString() {
        return "Aula " + this.titulo + " : " + this.tempo;
    }             


    @Override
    public int compareTo(Aula outraAula) {
        return this.titulo.compareTo(outraAula.getTitulo());
    }
}

Vc tem o restante do código que vc postou na pergunta? Se sim, posta ai pra nóis por favor

Bom, vou postar todo, se achar que falta alguma coisa me diz. Obrigado. BTW, existiria a possibilidade de, em alguma remota ocasiao, ser possivel falar por telefone com algum de voces? Agradeço++

package br.com.alura;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class Curso {

        private String nome;
        private String instrutor;
        private List<Aula> aulas = new LinkedList<Aula>();
        private Set<Aluno> alunos = new HashSet<>();


        public Curso(String nome, String instrutor) {
            this.nome = nome; 
            this.instrutor = instrutor;
        }

        public String getNome() {
            return nome;
        }

        public String getInstrutor() {
            return instrutor;
        }

        public List<Aula> getAulas() {
            return aulas;
        }

        public void adiciona(Aula aula) {
            this.aulas.add(aula);
        }

        @Override
        public String toString() {
//           return "Curso: "+ this.getNome() + " - " + this.getInstrutor();     
//           return "[Curso:"+ this.getNome()+",tempo total:"+ this.getTempoTotal()+ ", aulas: ["+ this.aulas+"] ]";
           return "Curso: " + this.getNome() + ", Tempo total: " + this.getTempoTotal() +
           ", Aulas: " + this.aulas;

        }    

        public int getTempoTotal () {

            int tempoTotal = 0;
            for (Aula aula : aulas) {
                tempoTotal += aula.getTempo();}
            return tempoTotal;
        }    
//                Versao equivalente do for-each anterior
//                num for next tradicional.        
//            for (int i = 0; i < aulas.size(); i++){
//                tempoTotal += aulas.get(i).getTempo();
//            }
//            return tempoTotal;

        public void matricula(Aluno aluno) {
            this.alunos.add(aluno);
        }

        public Set<Aluno> getAlunos() {
            return Collections.unmodifiableSet(alunos);
        }

        public boolean estaMatriculado(Aluno esteAluno) {
            return this.alunos.contains(esteAluno);
        }

        @Override
        public boolean equals(Object obj) {
            Aluno outroAluno = (Aluno) obj;
            return this.nome.equals(outroAluno.getNome());
        }

        @Override
        public int hashCode(){
            return this.nome.hashCode();
        }


}

package br.com.alura;

public class Aula implements Comparable {

private String titulo;
private int tempo;

public Aula(String titulo, int tempo) {
    this.titulo = titulo;
    this.tempo = tempo;
}

public String getTitulo() {
    return titulo;
}

public int getTempo() {
    return tempo;
}

@Override
public String toString() {
    return "Aula " + this.titulo + " : " + this.tempo;
}             


@Override
public int compareTo(Aula outraAula) {
    return this.titulo.compareTo(outraAula.getTitulo());
}

} package br.com.alura;

public class Aluno {

private String nome;
private int numeroMatricula;

public Aluno(String nome, int numeroMatricula) {
    if (nome == null) {
        throw new NullPointerException("Nome não pode ser nulo");
    }
    if (numeroMatricula == 0) {throw new NullPointerException ("Matricula 0");
    }
    this.nome = nome;
    this.numeroMatricula = numeroMatricula;
}
@Override
public String toString() {
    return "Aluno: " + this.nome+ ", mat.: " + this.numeroMatricula;

} public String getNome() { return nome; } public int getNumeroMatricula() { return numeroMatricula; }

}

package br.com.alura;

public class TestaCursoComAluno {

    public static void main(String[] args) {

        Curso javaColecoes = new Curso("Dominando as coleções do Java",
                "Paulo Silveira");

        javaColecoes.adiciona(new Aula("Trabalhando com ArrayList", 21));
        javaColecoes.adiciona(new Aula("Criando uma Aula", 20));
        javaColecoes.adiciona(new Aula("Modelando com coleções", 24));

        Aluno a1 = new Aluno("Rodrigo Turini", 34672);
        Aluno a2 = new Aluno("Guilherme Silveira", 5617);
        Aluno a3 = new Aluno("Mauricio Aniche", 17645);

// Aluno a4 = new Aluno("Fulano", 0); // Aluno a5 = new Aluno(null, 0);

    javaColecoes.matricula(a1);
    javaColecoes.matricula(a2);
    javaColecoes.matricula(a3);


    Aluno turini = new Aluno("Rodrigo Turini", 34672);
            System.out.println(a1.equals(turini));
            }

}

Entendi, mas vou dividir a resposta em duas partes, kkk

Você pode entrar em contato com a Alura, via e-mail mesmo. Você pode entrar em contato via este formulário: https://suporte.alura.com.br/

Já a segunda resposta, eu acredito que o eclipse vai reclamar (na forma de warning) porque a sua variável nome está como private, mas como vc está acessando ela no escopo da classe isso não teria problema. Vc pode acessar a mesma via .nome ou . getNome().

Espero, ter esclarecido sua dúvida!! Um abraco.

Nao, claro que nao esclareceu nem respondeu. Eu sugiro que vc leia os posts e pense sobre o que esta escrito. Se mesmo assim nao consegue entender as perguntas, por favor me avisa que tentarei ser mais claro. :=) Um abraço, Alias, eu nao marcaria este topico como resolvido.

Opa Yaco, vc por um acaso teria a mensagem do erro que está dando?

Tu tens Github?

Yaco, peguei exatamente todos os códigos que vc postou aqui, e sim temos um erro neste método equals. Qual é o problema?

Ele dá este erro, pq vc está usando Aluno dentro de Curso que nao conhece os atributos de Aluno diretamente. Como sugestão, eu sugiro que vc implemente o equals e hashCode na classe Aluno mesmo

No caso, seu código ficaria deste jeito.

    @Override
    public boolean equals(Object obj) {
        Aluno outroAluno = (Aluno) obj;
        return this.nome.equals(outroAluno.getNome());
    }

Se ainda tiver dúvida, ou nao tiver ainda ficado claro pra ti eu tento te explicar de uma outra forma

Ta vendo como se faz necessario uma conversa por telefone???!!!! Ne??? Voce nao quer informar a teu patrao - que seguramente esta ganhando muito dinheiro vendendo algo que nao entrega - que deveria ser mais...????

Enfim, vou dedicar um pouco mais do meu tempo para que, quem sabe, as coisa melhoram, e voces bolam uma forma mais eficiente de atender as necessidades daqueles que pagam para que voces tenham um salario.

AGORA POR FAVOR, PRESTA ANTENCAO, POR FAVOR, LEIA ATE O FIM. POR FAVOR.

1 - O primeiro assunto é:no teu codigo, esta linha esta assim e funciona: return this.nome.equals(outroAluno.getNome());

no codigo mostrado na aula gravada ( e tambem na "opiniao do instrutor" do exercicio "verificando se esta matriculado") a linha esta como segue, SEM O GET, e tambem funciona: return this.nome.equals(outroAluno.nome());

mas se eu coloco a linha desse mesmo jeito o eclipse reclama e pede o get.

PORQUE? Ou sera que o instrutor esta blefando?

2 - O segundo assunto é:

DE NOVO, POR FAVOR, PRESTA ANTENCAO, POR FAVOR, LEIA ATE O FIM. POR FAVOR.

Alguem teria que descer um pouquinho do Olimpo, justificar os valores que cobram e dedicar alguns minutos para assistir algumas partes da aula.

Aproximadamente no minuto 8:00 a execucao do codigo mostra dois resultados false. Depois, no minuto 11:30 mostra o override e faz a execucao. E o resultado é um false e depois um true.

Mas, quando faço exatamente o mesmo que mostra a aula, no meu codigo - que é esse que ja te passei - O RESULTADO CONTINUA SENDO DOIS FALSE!!! Nao é como como a aula diz que deve ser.

PORQUE? Voce consegue responder? Alguem consegue?

Muito obrigado,

Nao tenho github, tenho marcado um workshop disso para um destes dias. Porque? Como isso pode ajudar aqui?

Bom vamos lá, neste caso o professor está explicando sobre equals e hashCode. Ambos funcionam sobre a estrutura de dados de tabela de espalhamento. Quando o instrutor implementa o método estaMatriculado na class Curso o método contains por debaixo dos panos precisa dos métodos equals e hashCode para funcionar.

Classe - Curso.java

public boolean estaMatriculado(Aluno aluno) {
        return this.alunos.contains(aluno);
    }

Neste caso, vc precisa implementar o método equals e hashCode na classe Aluno pq vc esta verificando no array de alunos se ele contém um objeto do tipo Aluno e no caso vendo se existe o aluno atraves do nome dele

Classe - Aluno.java

@Override
    public boolean equals(Object obj) {
        Aluno outro = (Aluno) obj;        
        return this.nome.equals(outro.nome);
    }

    @Override
    public int hashCode() {
        return this.nome.hashCode();
    }

Ficou mais claro, agora?