E aí pessoal, eu tenho que criar uma "calculadora cientifica" usando métodos. O usuário vai escolher no menu qual operação que deseja e daí tem que aparecer o resultado na tela, eu consegui fazer quase tudo exceto a parte das raizes de uma equação de segundo grau. O cara vai digitar os valores para "a,b, c", daí resolvo a equação só que não tô conseguindo mostrar o resultado na tela.
O código:
[code]import java.util.Scanner;
public class c{
public static void main(String[] args){
Scanner scn = new Scanner(System.in);
int fim = 0, escolha;
double r2;
System.out.println("!!Calculadora Cientifica!!" );
while(fim == 0){
System.out.println("Menu" );
System.out.println("1 - Raiz quadrda \n2 - Exponenciacao \n3 - Raizes de uma equacao de 2 grau \n4 - Area do retangulo \n5 - Fatorial \n8- Sair do programa" );
System.out.println("Escolha sua opcao:" );
escolha = scn.nextInt();
switch(escolha){
case 1:
System.out.println("Digite um valor:" );
int r1 = scn.nextInt();
System.out.println();
System.out.println("Resultado: " +raiz(r1));
System.out.println();
break;
case 2:
System.out.println("Digite um valor para a base:" );
double b = scn.nextDouble();
System.out.println("Digite um valor para o exponte:" );
double e = scn.nextDouble();
System.out.println();
System.out.println("Resultado: " + expoente(b,e));
System.out.println();
break;
case 3:
System.out.println("Digite um valor para a:" );
double a = scn.nextDouble();
System.out.println("Digite um valor para b:" );
double b1 = scn.nextDouble();
System.out.println("Digite um valor para c:" );
double c = scn.nextDouble();
System.out.println("Resultado: " +equacao(a,b1,c));
break;
case 4:
System.out.println("Digite um valor para a base:" );
double base = scn.nextDouble();
System.out.println("Digite um valor para a altura:");
double altura = scn.nextDouble();
System.out.println("Resultado: " +retangulo(base,altura));
System.out.println();
break;
case 5:
System.out.println("Digite um valor:" );
double f = scn.nextDouble();
System.out.println();
System.out.println("Resultado: " +fatorial(f));
System.out.println();
break;
case 8:
System.out.println("Espero que tenha ajudado. ");
fim++;
break;
default:
System.out.println("Digite uma opcao valida :) " );
System.out.println();
}
}
}
//metodo pra raiz
public static double raiz(double a){
double r = Math.sqrt(a);
return r;
}
//metodo pra exponenciacao
public static double expoente(double b1, double e1){
//pra calcular o expoente
double r2 = 1;
for(int x = 0; x < e1; x++){
r2 = r2 * b1;
}
return r2;
}
//metodo para o retangulo
public static double retangulo(double base2, double altura2){
double area = 0;
area = base2 * altura2;
return area;
}
//metodo para fatorial
public static double fatorial(double f1){
double fat = 1;
for(int x = 0; x < f1; x++){
fat = fat * (f1 - x);
}
return fat;
}
[b]//metodo para as raizes
public static double equacao(double a1, double b2, double c2){
double delta = (b2 * b2) - (4 * a1 * c2);
if(delta == 0){
double x = (- b2 + Math.sqrt(delta)) / (2 * a1);
}
else if(delta > 0){
double x = (- b2 + Math.sqrt(delta)) / (2 * a1);
double x2 = (- b2 - Math.sqrt(delta)) / (2 * a1);
}
else{
System.out.println("Não existe raiz real." );
}
return x;
}[/b]
}[/code]
Quando eu compilo da erro no meu return, o que posso fazer pra arrumar esses erros? Obrigado.
No caso 3 do seu switch, aí você precisa verificar o retorno do método “equacao”. Algo como:
case 3:
System.out.println("Digite um valor para a:" );
double a = scn.nextDouble();
System.out.println("Digite um valor para b:" );
double b1 = scn.nextDouble();
System.out.println("Digite um valor para c:" );
double c = scn.nextDouble();
double[] x = equacao (a, b1, c);
if (x.length ==0) {
System.out.println ("Equacao nao tem raizes reais");
} else if (x.length == 1) {
System.out.println ("A unica raiz da equacao eh " + x[0]);
} else if (x.length == 2) {
System.out.println ("A equacao tem 2 raizes, " + x[0] + " e " + x[1]);
}
Desculpe mais uma vez. É questão de eu não ter visto direito os “;” - não pus todo o código no compilador
E de qualquer maneira, evite usar nomes tão curtos para classes - que raio de classe tem nome “c”? Está batendo com o nome dos parãmetros da equação de segundo grau, o que é sempre muito confuso.
E aah, obrigado pela ajuda. Não consegui ajeitar, mas de qualquer jeito obrigado, agora já tenho que sair daí quando eu voltar eu olho o código direitinho e vou tentar solucionar.
Dei uma acertadinha no seu programa, mas não sei se ele está funcionando direitinho
import java.util.Scanner;
// 1) Evite usar métodos estáticos - mas neste caso não deve haver problemas.
//
// 2) Evite usar nomes de variáveis curtos (a menos que, como no caso desta calculadora, seja melhor usar
// os nomes curtos)
//
// 3) Dentro de um "case", se precisar definir uma nova variável, é melhor então
// pôr o conteúdo do "case" dentro de chaves.
public class Calculadora {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int fim = 0;
int escolha;
System.out.println("!!Calculadora Cientifica!!");
while (fim == 0) {
System.out.println("Menu");
System.out.println("1 - Raiz quadrada \n2 - Exponenciacao \n3 - Raizes de uma equacao de 2 grau \n4 - Area do retangulo \n5 - Fatorial \n8- Sair do programa");
System.out.println("Escolha sua opcao:");
escolha = scn.nextInt();
switch (escolha) {
case 1:
System.out.println("Digite um valor:");
int r = scn.nextInt();
System.out.println();
System.out.println("Resultado: " + raiz(r));
System.out.println();
break;
case 2: {
System.out.println("Digite um valor para a base:");
double b = scn.nextDouble();
System.out.println("Digite um valor para o expoente:");
double e = scn.nextDouble();
System.out.println();
System.out.println("Resultado: " + expoente(b, e));
System.out.println();
}
break;
case 3: {
System.out.println("Digite um valor para a:");
double a = scn.nextDouble();
System.out.println("Digite um valor para b:");
double b = scn.nextDouble();
System.out.println("Digite um valor para c:");
double c = scn.nextDouble();
double[] x = equacao(a, b, c);
if (x.length == 0) {
System.out.println("Equacao nao tem raizes reais");
} else if (x.length == 1) {
System.out.println("A unica raiz da equacao eh " + x[0]);
} else if (x.length == 2) {
System.out.println("A equacao tem 2 raizes, " + x[0] + " e " + x[1]);
}
}
break;
case 4: {
System.out.println("Digite um valor para a base:");
double base = scn.nextDouble();
System.out.println("Digite um valor para a altura:");
double altura = scn.nextDouble();
System.out.println("Resultado: " + retangulo(base, altura));
System.out.println();
}
break;
case 5: {
System.out.println("Digite um valor:");
double f = scn.nextDouble();
System.out.println();
System.out.println("Resultado: " + fatorial(f));
System.out.println();
}
break;
case 8:
System.out.println("Espero que tenha ajudado. ");
fim++;
break;
default:
System.out.println("Digite uma opcao valida :) ");
System.out.println();
}
}
}
// metodo pra raiz
public static double raiz(double a) {
double r = Math.sqrt(a);
return r;
}
// metodo pra exponenciacao
public static double expoente(double b1, double e1) {
// pra calcular o expoente
double r2 = 1;
for (int x = 0; x < e1; x++) {
r2 = r2 * b1;
}
return r2;
}
// metodo para o retangulo
public static double retangulo(double base2, double altura2) {
double area = 0;
area = base2 * altura2;
return area;
}
// metodo para fatorial
public static double fatorial(double f) {
double fat = 1;
for (int x = 0; x < f; x++) {
fat = fat * (f - x);
}
return fat;
}
// metodo para as raizes
public static double[] equacao(double a, double b, double c) {
double delta = (b * b) - (4 * a * c);
if (delta == 0) {
return new double[] { (-b + Math.sqrt(delta)) / (2 * a)
};
} else if (delta > 0) {
return new double[] {
(-b + Math.sqrt(delta)) / (2 * a), (-b - Math.sqrt(delta)) / (2 * a)
};
} else {
return new double[0];
}
}
}