日期:2014-05-20  浏览次数:20667 次

【求解】已知三角形各点坐标,求三角形面积。
各位大神,以下是我求三角形面积的代码,还请大神们看看哪里错了,我输入坐标后,最后结果都显示为1.0,神奇了。

import java.util.*;
class MyClass{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
System.out.print("Please enter the pixel:");
double x1 = input.nextDouble();
double y1 = input.nextDouble();
double x2 = input.nextDouble();
double y2 = input.nextDouble();
double x3 = input.nextDouble();
double y3 = input.nextDouble();
double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1/2);
double side2 =Math.pow((Math.pow((x2-x3), 2)+Math.pow((y2-y3),2)),1/2);
double side3 =Math.pow((Math.pow((x3-x1), 2)+Math.pow((y3-y1),2)),1/2);
double s =(side1 + side2 + side3)/2;
double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),1/2);
System.out.println("The triangle area ia " + area);
}
}

------解决方案--------------------
1  Math 类里pow()的定义,public static double pow(double a,double b),要求传入的参数是double型的。
2 double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1/2);
   看这语句,x1,x2,y1,y1都是double的,int 型字面量“2”转型为double 是2.0.
3  关键是那个 1/2,这个转换过程是 1 2都是int型字面量,程序先按整型计算1/2,结果是0,之后把这个0 转
   成double型,结果是0.0.
4 所以楼主的代码相当于:
  double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),0);
  算下来:
      三个边都是1。
  后面的计算面积的代码:
     double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),1/2);
  相当于:
     double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),0);
     所以这个area=1.0.

试试下面的代码:

import java.util.*;

public class CalculateTheAreaOfTriangle1
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
System.out.println("Please enter the pixel:");
double x1 = input.nextDouble();
double y1 = input.nextDouble();
double x2 = input.nextDouble();
double y2 = input.nextDouble();
double x3 = input.nextDouble();
double y3 = input.nextDouble();
double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1/2);
System.out.println("side 1 is "+side1);
double side2 =Math.pow((Math.pow((x2-x3), 2)+Math.pow((y2-y3),2)),1/2);
System.out.println("side 2 is "+side2);
double side3 =Math.pow((Math.pow((x3-x1), 2)+Math.pow((y3-y1),2)),1/2);
System.out.println("side 3 is "+side3);
double s =(side1 + side2 + side3)/2;
double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),1/2);
System.out.println("The triangle area is " + area);


side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1.0/2); //1/2 变成1.0/2或者(double)1/2)
System.out.println("side 1 is "+side1);
side2 =Math.pow((Math.pow((x2-x3), 2)+Math.pow((y2-y3),2)),1.0/2);
System.out.println("side 2 is "+side2);
side3 =Math.pow((Math.pow((x3-x1), 2)+Math.pow((y3-y1),2)),1.0/2);