[Resolvido] Algoritmo para Calcular Raiz da equaçao de bháskara

Bom dia, bom fazendo este algoritmo aqui para efetue o cálculo das raízes da equação de báscara obtive este resultado no algoritmo de forma simples, alguem poderia analizar e dizer com suas palavras se tem algo errado se poderia estar fazendo de forma diferente ? e me passar uma explicaçao mais formal que a minha caso esteja errado.




import java.util.Scanner;

/**
 * Desenvolva um algoritmo que leia 3 valores inteiros e efetue o cálculo das
 * raízes da equação de báscara. Se não foi possível calcular as raízes, mostre
 * uma mensagem correspondente. Obs.: não é possível divisão por 0 (zero) e raiz
 * quadrada de número negativo;
 */

public class RaizDeBaskara {

	public static void main(String[] args) {

		float a, b, c, delta, x1, x2;

		System.out.println("\n Digite o Valor de A ");
		Scanner v1 = new Scanner(System.in);
		a = v1.nextFloat();
		// digitando valor 2
		System.out.println("\n Digite o Valor de B ");
		Scanner v2 = new Scanner(System.in);
		b = v2.nextFloat();
		// sigitando valor3
		System.out.println("\n Digite o Valor de C ");
		Scanner v3 = new Scanner(System.in);
		c = v3.nextFloat();

		// calculo de delta, baskara
		delta = b * b - 4 * a * c;// poderia estar usando Math.pow(b,2)ao inves de b*b,
		// delta recebe meu valor de (b*b),que e B ao
		// quadrado - 4* valor de A * valor de C
		if (delta > 0) {// se condicao for verdadeira executa
			x1 = (float) ((-b + Math.sqrt(delta)) / (2 * a));// x'calculo
			// de
			// x= -b +/-
			// Raiz de delta
			// (div/) por 2 * a

			x2 = (float) ((-b + Math.sqrt(delta)) / (2 * a));// x"
			// Math.sqrt
			// calcula a
			// raiz, raiz do
			// reaultado de
			// delta

			System.out.println("\n Valor de X' e = " + x1
					+ "\n Valor de X'' e = " + x2);

		} else {
			System.out
					.println("Não e possivel calcular esta Raiz, não e um numero real ");
		}

	}

}

No cálculo mesmo só tem um probleminha, x1 e x2 estão iguais.

deveria ser:
x1 = (float) ((-b + Math.sqrt(delta)) / (2 * a));
x2 = (float) ((-b - Math.sqrt(delta)) / (2 * a));

Fora isso, nao é preciso instanciar um novo Scanner a cada valor lido. É só instanciar uma vez e ir chamando o nextFloat.
Ou melhor ainda, chamar o nextLine() , que retorna a linha digitada até o “enter”. Vem como string, e aí vc converte para Float. Dessa forma se tem mais controle sobre os dados em formato incorreto.

EDIT:

Ah, também esqueci de mencionar outro erro no cálculo: delta pode ser igual a zero também, só não pode ser negativo. Nesse caso as duas raizes serão iguais, pois sqrt(delta) é igual a zero.

tinha esquecido essa questão :
x1 = (float) ((-b + Math.sqrt(delta)) / (2 * a)); // soma
x2 = (float) ((-b - Math.sqrt(delta)) / (2 * a)); // subtrai

essa questao estava se referindo porque faltou o >=, if (delta >= 0) .

Só nao entendi o que disse aqui sobre:

quis referir desta forma:

System.out.println("\n Digite os Valores ");  
	        Scanner v1 = new Scanner(System.in);  
	        a = v1.nextFloat();  
                b = v1.nextFloat();  
                c= v1.nextFloat();  

tentei o 
                a = v1.nextLine();  
                b = v1.nextLine();  
                c = v1.nextLine();  

O que eu quis dizer é que não precisa ficar criando outro Scanner para cada input. Assim:

System.out.print("\n Digite o Valor de A: "); Scanner v1 = new Scanner(System.in); a = v1.nextFloat(); // digitando valor 2 System.out.print("\n Digite o Valor de B: "); b = v1.nextFloat(); // digitando valor3 System.out.print("\n Digite o Valor de C: "); c = v1.nextFloat();
Igual, só que aproveitando o mesmo scanner. Ele não é um objeto descartável, utilize o mesmo enquanto houver algo para ler. Também troquei o println por print só para ficar mais bonitinho, assim os dados são digitados na mesma linha da pergunta.

Sobre usar o nextLine(), deixa pra lá por enquanto, era frescura minha rsrs
Era para permitir um tratamento caso o usuário digite dados incorretos (vc já viu o que acontece? Estoura uma InputMismatchException, bem pouco amigável), mas dá para fazer um tratamento simples assim mesmo, basta colocar um try/catch:

try { System.out.print("\n Digite o Valor de A: "); a = v1.nextFloat(); // digitando valor 2 System.out.print("\n Digite o Valor de B: "); b = v1.nextFloat(); // digitando valor3 System.out.print("\n Digite o Valor de C: "); c = v1.nextFloat(); } catch (InputMismatchException e) { System.out.println("Erro! Número inválido. A operação foi cancelada."); return; }

Se “a” for igual a zero você não tem uma equação do segundo grau.
Ah, outra coisa. É método ou fórmula de Bhaskara, não equação de Bhaskara. A equação é do segundo grau ou equação quadrática.

[]'s

ok entendido gomesrod sobre a questao que voçe disse agora, sobre try e catch, eu so nao sabia usa-la valeu pela explicação.

nao entendi davidbuzatto

fiz de acordo com enunciado veja:

pelo jeito aqui e formula para calcular e é uma equação do 2º.

[quote=olivercld]nao entendi davidbuzatto

fiz de acordo com enunciado veja:

pelo jeito aqui e formula para calcular e é uma equação do 2º.
[/quote]
Rode seu programa, digite 0 quando o programa pedir o valor para a e veja o que acontece. Aí você entenderá o que o davidbuzatto quis dizer.

Para que a equação do tipo ax² + bx + c = 0 seja do segundo grau, o valor de a deve ser maior que zero. Seu programa deve testar essa condição.

tnaires fiz como me disse, nao sei se e desta forma, tirei o try e catch

System.out.println("\n Digite os Valores ");
		Scanner v1 = new Scanner(System.in);
		System.out.print("\n Digite o valor de A ");
		a = v1.nextInt();
		if(a <= 0){
			System.out.println(" Valor nao aceito tente novamente ");
			System.exit(0);// se eu nao coloca se isso ia para frente continuava pedindo para digitar B e C 
		}

so nao sei como fazer ao invez de encerrar voltar ´para digitar o valor de A novamente

é dessa forma ou não ?

O coeficiente “a” deve ser diferente de 0.

Não pode ser zero pois se a = 0, então tem-se:
0x² + bx + c = 0 =>
bx + c = 0 (equação do primeiro grau).

Se aplicarmos o método de Bhaskara para a = 0, temos uma divisão por zero.

[]'s

entendido so equação do 2º se for assim ax² + bx + c = 0 , bom davidbuzatto então eu posso deixar dessa forma: assim ela quando digito 0 para A nao aceita.

//try{
		System.out.println("\n Digite os Valores ");
		Scanner v1 = new Scanner(System.in);
		System.out.print("\n Digite o valor de A ");
		a = v1.nextInt();
		if(a <= 0){
			System.out.println(" Valor nao aceito tente novamente ");
			System.exit(0);
		}
		System.out.print("\n Digite o valor de B ");
		b = v1.nextInt();
		System.out.print("\n Digite o valor de C ");
		c = v1.nextInt();

só lembrando não e trabalho não e só para praticar mesmo agradeço a grande ajuda que vocês estão dando.

O coeficiente “a” deve ser diferente de 0.

Não pode ser zero pois se a = 0, então tem-se:
0x² + bx + c = 0 =>
bx + c = 0 (equação do primeiro grau).

Se aplicarmos o método de Bhaskara para a = 0, temos uma divisão por zero.

[]'s[/quote]
Isso, cometi um engano :oops: Quis dizer diferente de zero, mas não vou editar o meu post

Obrigado a vocês…