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 ");
}
}
}
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.
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.
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
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.