Equação do 2° grau usando OO

Olá pessoal
Criei uma classe para resolver a equação do 2° grau, porém os métodos x1 e x2 da classe que criei estão retornando o valor errado. Usei como exemplo: a = 1, b = -4 e c = -5

resolução: possui duas raízes 5 e -1, porém o algoritmo esta retornando ambas com o valor 2.

Segue abaixo a classe:

    public class EquacaoSegundoGrau {
    private double a, b, c, delta;
    
    public void ValordeA(double a) {
        this.a = a;
    }
    public void ValordeB(double b) {
        this.b = b;
    }
    public void ValordeC(double c) {
        this.c = c;
    }
    /*Valor do Delta
    *Fórmula: delta=b²-4*a*c
    */        
    public double Delta() {
        double delta = 0;
        this.delta = delta;
        delta = Math.pow(b, 2) -4 * a * c;
        return delta;
    }
    //x1 - resultado do primeiro x
    public double X1() {
        double x1;            
        x1 = (-b + Math.sqrt(delta)) / (2 * a);
        return x1;
    }
    //x2 - resultado do segundo x
    public double X2() {
        double x2;
        x2 = (-b - Math.sqrt(delta)) / (2 * a);
        return x2;
    }

}

Utilizando a classe:

public class EqSegundoGrau {
        public static void main(String[] args) {
                double delta=0;
                EquacaoSegundoGrau Segundo = new EquacaoSegundoGrau();
                Segundo.ValordeA(1);
                Segundo.ValordeB(-4);
                Segundo.ValordeC(-5);
                delta = Segundo.Delta();                 
                if(delta < 0) {
                    System.out.println("Delta = "+delta+"\n "
                            +"A equação não possui raízes reais.");
                } else if(delta > 0) {
                    System.out.println("Delta = "+delta+"\n X1 = "+Segundo.X1()+"\n "
                            + "X2 = "+Segundo.X2());
                } else if(delta == 0) {
                    System.out.println("Delta = "+delta+"\n "
                            + "X1 = "+Segundo.X1()+"\n X2 = "+Segundo.X2()+"\n"
                                    + "A equação possui uma raíz real.");
                } else {
                    System.out.println("Verifique se informou apenas numeros.");
                }

Acredito que o problema esteja no método Delta(). Substitua-o por:

public double Delta() {
  this.delta =  Math.pow(b, 2) -4 * a * c;
  return this.delta;
}

Apenas uma observação que gostaria de fazer…

O delta pode estar em apenas 3 estados:

  • menor que zero
  • maior que zero
  • igual a zero

Logo, aquele seu else está servindo de nada. Vc poderia seguramente escrever:

if (delta < 0) {
  /* ... */
} else if (delta > 0) {
  /* ... */
} else {
  /* Se delta não for maior e nem menor que 0, ele só pode ser igual */
}
1 curtida

Resolveu meu problema wldomiciano. E obrigado pela observação também :smiley:

1 curtida