需求:給出三角形的三邊長,判斷是否三角形,如是,判斷是等邊三角形,等腰三角形,不等邊三角形,銳角三角形,直角三角形和鈍角三角形,并計算出三角形的面積.

考查點:建模的準確性,思維的全面性,浮點數的比較.

補充知識:cosA
=b方+c方-a方/2*b*c
package com.sitinspring;


/** *//**
* 形狀類,未必是三角形
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-11-6
*/

public class Shape
{
// 三邊長
protected double a;
protected double b;
protected double c;

public Shape(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
}

protected String getInfo()
{
return "("+a+","+b+","+c+")";
}

public String toString()
{
return getInfo()+"非三角形";
}
}

package com.sitinspring;



/** *//**
* 三角形類
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-11-6
*/

public class Triangle extends Shape
{
// 三角
private double cosA;
private double cosB;
private double cosC;
private static final double Mini=0.000001;

public Triangle(double a,double b,double c)
{
super(a,b,c);
cosA=getCos(a,b,c);
cosB=getCos(b,a,c);
cosC=getCos(c,a,b);
}

private static double getCos(double a,double b,double c)
{
return (b*b+c*c-a*a)/(2*b*c);
}

private static boolean isEqual(double op1,double op2)
{
return Math.abs(op1-op2)<Mini;
}

public String toString()
{
String retval=getInfo()+"三角形";
// 邊判斷

if(isEqual(a,b) && isEqual(b,c))
{
retval+=" 等邊三角形";
}

else if(isEqual(a,b) || isEqual(b,c))
{
retval+=" 等腰三角形";
}

else
{
retval+=" 常規三角形";
}
// 角判斷

if(cosA<0 || cosB<0 || cosC<0)
{
retval+=" 鈍角三角形";
}

else if(isEqual(cosA,0) || isEqual(cosB,0) || isEqual(cosC,0))
{
retval+=" 直角三角形";
}

else
{
retval+=" 銳角三角形";
}
return retval;
}
}

package com.sitinspring;


/** *//**
* 形狀構造器
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-11-6
*/

public class ShapeMaker
{

public Shape generate(double a,double b,double c)
{

if(a<0 || b<0 || c<0)
{
return new Shape(a,b,c);
}

else if(a+b<c || a+c<b || b+c<a)
{
return new Shape(a,b,c);
}
return new Triangle(a,b,c);
}

public static void main(String[] args)
{
ShapeMaker maker=new ShapeMaker();
System.out.println(maker.generate(1, 1, 3));
System.out.println(maker.generate(3, 3, 3));
System.out.println(maker.generate(3, 3, 4));
System.out.println(maker.generate(3, 4, 2));
System.out.println(maker.generate(1, 1, -3));
System.out.println(maker.generate(3, 4, 3));
System.out.println(maker.generate(3, 4, 4));
System.out.println(maker.generate(3, 4, 5));
System.out.println(maker.generate(3, 4, 6));
}
}

代碼下載:
http://m.tkk7.com/Files/sitinspring/TriAngle20071106135459.rar