Ola pessoal, estou desenvolvendo uma calculadora simples com tratamento de exceções, porém estou com problema no calculo do fatorial, a classe esta compilando(mas ele nao calcula na classe principal, e chama a exceção). Segue o codigo, se puderem me ajudar, agradeço.
public class Fatorial {
double fat;
public double Fatorial(double a)
{
}
public double fat(double a, double fat)
{
if(a>0)
if(a<=1)
return 1;
else{
fat=a*fat(a-1);
return fat;}
else
throw (new ExceptionNumNegativo ("Não é possível Calcular raizes de números negativos!"));
}
}
confesso que demorei um poco pra intender seu codigo, mais vão algumas sugestões:
public double Fatorial(double a)
{
}
não sei se isso era o construtor, mais no construtor vc nao poe o tipo de retorno, ficaria simplesmente :
public Fatorial(double a)
{
}
quanto a esse metodo fat, que acredito que calcule o fatorial, em relação a esses if:
if(a>0)
if(a<=1)
return 1;
esses ifs vc pode substituir por:
if (a > 0)
if ( a == 1 )
return 1;
else{
//…
//coloque um return aqui tb, acho que esta faltando
}
else{//…
}
uma coisa que seria legal por causa da legibilidade, por isso aconselho dessa forma
eu nao testei o seu codigo, mais o motivo de não executar o que vc quer, acredito que seja por que, em algum momento esta sendo chamado o fat com 0 ou um numero negativo…
poe um sistem.out na primeira linha do metodo exibindo a variavel a, e ve o q q aparece…
eu to sem acesso a minha maquina agora (to formatando ela e usando um server aki…), mais se nao descobrir o erro assim eu tento descobrir tb… (talvez seja a falta do return como comentei no codigo…)
eu vo da uma pesquisada, mais ao que eu conheço(claro que sei que posso estar enganado) o metodo construtor consiste em um metodo contendo apenas o tipo de acesso e depois o nome do metodo (que deve ser exclusivamente o mesmo nome da classe, sendo java case sensitive) e depois os atributos recebidos entre parenteses…
o retorno é sempre um objeto da classe em questão…
Uma dica útil. Se você tem um return dentro de um if, ou lança uma exceção não existe sentido em colocar um else.
Aliás, esse warning também pode ser ligado nas IDEs. O bom é que isso evita identação descenessária, o que torna o código mais legível.
num conheço esse faioli nao, rs.
olha galera, desculpe por ter colocado o codigo incompleto,
mas ja consegui resolver o problema, vlw pela atenção!
segue o codigo:
public class Fatorial {
double fat=1;
double fat2=1;
public double fat(double a)throws ExceptionNumNegativo
{
if(a==0)
return 1;
if(a>0)
{
for(int i=2;i<=a;i++)
{
fat*=i;
}
return fat;
}
else
throw (new ExceptionNumNegativo ("Não é possível Calcular raizesde números negativos!"));
}
public double fat1(double b)throws ExceptionNumNegativo
{
if(b==0)
return 1;
if(b>0)
{
for(int i=2;i<=b;i++)
{
fat2*=i;
}
return fat2;
}
else
throw (new ExceptionNumNegativo ("Não é possível Calcular raizesde números negativos!"));
}
}
usei dois metodos para fatoriais, pois na classe principal da calculadora, ao calcular o fat do textfiled 2 ele calculava errado…olha ai o codigo da classe principal… http://pastebin.com/f62df313b