Estou fazendo um exercício em que eu tenho que calcular mas está dando resultado errado.
[code]public class Challenge
{
public static void main( String[] args )
{
double a;
a = triangleArea(3, 3, 3);
System.out.println("A triangle with sides 3,3,3 has an area of:" + a);
a = triangleArea(3, 4, 5);
System.out.println("A triangle with sides 3,4,5 has an area of:" + a);
a = triangleArea(9, 9, 9);
System.out.println("A triangle with sides 7,8,9 has an area of:" + a );
}
public static double triangleArea( int a, int b, int c )
{
double s = (a+b+c)/2;
return Math.pow(s*(s-a)*(s-b)*(s-c), 0.5);
}
Olá o erro está na hora de passar o valor do semiperimetro. vc tá fazendo (a+b+c)/2 sem fazer o cast para double. como ele entende que são valores int então faz o cast implícito para int depois da divisão por 2. Se vc colocar double não dará mais errado:
double s= (double) a+b+c/2;
Sem cast ele entende como divisão de inteiros ,se vc dividir dois inteiros de valores literais 3 e 2 , o resultado será 1, caso faça o cast para double o resultado será 1.5 . Lembre-se que os inteiros ignoram a parte fracionário. Diferente dos tipos double.