Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Colocar Classe que calcula Raiz Quadrada na arvore no padrão visitor !!!

Olá Mauricio primeiramente obrigado pelas aulas tu sabe D+ tu só pode ser encarnação de algum Deus kkkk, eu queria ver como eu poderia adicionar na árvore a classe RAIZ QUADRADA que eu criei para poder imprimir junto com toda a STRING da conta.

Eu tentei assim mais não deu certo segue minha classe RAIZQUADRADA, mais não estou enxergando como ela entraria na árvore se puder me ajudar. OBRIGADO !!

// CLASSE RAIZQUADRADA

 package br.com.cap4;

public class RaizQuadrada implements Expressao {

    private Expressao expressao;
    private int numero;
    public RaizQuadrada(Expressao e) {
        this.expressao = e;
    }

    @Override
    public int avalia() {
        this.numero = (int) Math.sqrt(expressao.avalia());
        return numero;
    }

    @Override
    public void aceita(Impressora impressora) {
        impressora.visitaRaizQuadrada(this);        
    }
    @Override
    public String toString() {
        return "\\u221A "+numero;
    }

}

CLASSE IMPRESSORA

package br.com.cap4;

public class Impressora {
    public void visitaSoma(Soma soma) {
        System.out.print("(");

        soma.getEsquerda().aceita(this);

        System.out.print(" + ");

        soma.getDireita().aceita(this);

        System.out.print(")");
    }

    public void visitaSubtracao(Subtracao subtracao) {
        System.out.print("(");

        subtracao.getEsquerda().aceita(this);

        System.out.print(" - ");

        subtracao.getDireita().aceita(this);

        System.out.print(")");
    }
    public void visitaMultiplicacao(Multiplicacao multiplicacao) {
        System.out.print("(");

        multiplicacao.getEsquerda().aceita(this);

        System.out.print(" * ");

        multiplicacao.getDireita().aceita(this);

        System.out.print(")");
    }

    public void visitaDivisao(Divisao divisao) {
        System.out.print("(");

        divisao.getEsquerda().aceita(this);

        System.out.print(" / ");

        divisao.getDireita().aceita(this);

        System.out.print(")");
    }
    public void visitaNumero(Numero numero) {
        System.out.print(numero.getNumero());
    }

    public void visitaRaizQuadrada(RaizQuadrada raizQuadrada) {

        System.out.println(raizQuadrada);        
    }
}
1 resposta
solução!

Oi Roger, tudo bom?

Segue um exemplo de implementação da classe RaizQuadrada e do Visitor para ela:

public class RaizQuadrada implements Expressao {

    private Expressao expressao;

    public RaizQuadrada(Expressao e) {
        this.expressao = e;
    }

    @Override
    public int avalia() {
        return (int) Math.sqrt(expressao.avalia());
    }

    public Expressao getExpressao() {
        return expressao;
    }

    @Override
    public void aceita(Visitor impressora) {
        impressora.visitaRaizQuadrada(this);
    }
}
@Override
    public void visitaRaizQuadrada(RaizQuadrada raizQuadrada){
        System.out.print("√(");
        raizQuadrada.getExpressao().aceita(this);
        System.out.print(")");
    }

Esse código, e todos os exercicios dessa aula prontos eu deixei disponivel no ultimo exercicio do capitulo:

https://cursos.alura.com.br/course/design-patterns-2/task/31629

As vezes pode ter dar um norte nessas horas =)

Qualquer problema é só falar.

Abraço!