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

Loop Infinito - Aula sobre o Visitor

Meu projeto está idêntico ao que foi feito em aula e meu console segue em um loop infinito ao tentar executar a aplicação. Alguém teve esse mesmo problema sabe o que poderia estar errado? (Estou usando o Visua Studio 2022)

Segue o código da aplicação abaixo:

class Program
    {
        static void Main(string[] args)
        {
            IExpressao esquerda = new Soma(new Numero(1), new Numero(10));
            IExpressao direita = new Substracao(new Numero(20), new Numero(10));
            IExpressao soma = new Soma(esquerda, direita);

            Console.WriteLine(soma.Avalia());
            Impressora impressora = new Impressora();
            soma.Aceita(impressora);

        }
    }
 public class Soma : IExpressao
    {
        public IExpressao Esquerda { get; private set; }
        public IExpressao Direita { get; private set; }

        public Soma(IExpressao esquerda, IExpressao direita)
        {
            this.Esquerda = esquerda;
            this.Direita = direita;
        }

        public int Avalia()
        {
            int valorEsquerda = Esquerda.Avalia();
            int valorDireita = Direita.Avalia();
            return valorEsquerda + valorDireita;
        }

        public void Aceita(Impressora impressora)
        {
            impressora.ImprimeSoma(this);
        }
    }
public class Substracao : IExpressao
    {
        public IExpressao Esquerda { get; private set; }
        public IExpressao Direita { get; private set; }

        public Substracao(IExpressao esquerda, IExpressao direita)
        {
            this.Esquerda = esquerda;
            this.Direita = direita;
        }

        public int Avalia()
        {
            int valorEsquerda = Esquerda.Avalia();
            int valorDireita = Direita.Avalia();
            return valorEsquerda - valorDireita;
        }

        public void Aceita(Impressora impressora)
        {
            impressora.ImprimeSubtracao(this);
        }
    }
 public class Numero : IExpressao
    {
        public int Valor { get; private set; }

        public Numero(int numero)
        {
            this.Valor = numero;
        }

        public int Avalia()
        {
            return this.Valor;
        }

        public void Aceita(Impressora impressora)
        {
            impressora.ImprimeNumero(this);
        }
    }
public class ImpressoraVisitor
    {
        public void ImprimeSoma(Soma soma)
        {
            Console.WriteLine("(");
            soma.Esquerda.Aceita(this);

            Console.WriteLine("+");
            soma.Direita.Aceita(this);

            Console.WriteLine(")");
        }

        public void ImprimeSubtracao(Substracao subtracao)
        {
            Console.WriteLine("(");
            subtracao.Aceita(this);

            Console.WriteLine("-");
            subtracao.Aceita(this);

            Console.WriteLine(")");

        }

        public void ImprimeNumero(Numero numero)
        {
            Console.WriteLine(numero.Valor);
        }
    }
1 resposta
solução!

Encontrei meu erro, estava esquecendo os parâmetros Esquerda e Direita na expressão de Subtração.