编写 一程序 ,求三角形面积,要求不能构造三角的情形以自定义导常抛出
使用到海伦公式求三角形面积:
P = (a+b+c) / 2
S = sqrt[ P(P - a) (P - b) (P - c) ]
方法一
//自定义一个异常类 class TriangleException extends Exception { public TriangleException() { } public TriangleException(String message) { super(message); } } class TriangleArea { double a, b, c; double p, area; //构造方法 public TriangleArea(double a, double b, double c) { this.a = a; this.b = b; this.c = c; } //定义一个求面积的方法 public void TArea() throws Exception { if ((a + b) > c && (a + c) > b && (b + c) > a) { p = (a + b + c) / 2; area = sqrt(p*(p-a)+p*(p-b)+p*(p-c)); System.out.println("三角形面积是:"+area); }else{ throw new TriangleException("输入三边的值不符合三角形的定义,不能构成三角形"); } } } //测试类 public class TriangleDemo { public static void main(String[] args) { TriangleArea ta = new TriangleArea(1, 2, 3); try { ta.TArea(); } catch (Exception e) { //自定义异常 抛出异常 System.out.println("捕获的异常信息是:"+e.getMessage()); } } }
方法二
//自定义一个异常类 class TriangleArgumentException extends Exception { public TriangleArgumentException() { } public TriangleArgumentException(String message) { super(message); } } public class TriangleDemo { public static void main(String[] args) { double area, p; Scanner sc = new Scanner(System.in); System.out.print("请输入三边的数据:"); //输入下数据可能有错误 所以放在try里面 try { int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); if ((a + b) > c && (a + c) > b && (b + c) > a) { p = (a + b + c) / 2; area = sqrt(p * (p - a) + p * (p - b) + p * (p - c)); System.out.println("三角形面积是:" + area); } else { throw new TriangleArgumentException("输入三边的值不符合三角形的定义,不能构成三角形"); } } catch (Exception e) { //System.out.println("输入的数据异常信息:"+e.toString()); //异常信息(是什么异常) System.out.println("输入的数据有错的原因:"+e.getMessage()); //异常原因 } } }
运行结果是
方法三
public class TriangleDemo { //测试类 public static void main(String[] args) { //调用静态方法 TriangleException(); } //定义一个静态方法 public static void TriangleException() { Scanner sc = new Scanner(System.in); System.out.print("请输入三边的数据:"); double a = sc.nextDouble(); double b = sc.nextDouble(); double c = sc.nextDouble(); //try catch 用类调用方法 try { TriangleDemo.TriangleTest(a, b, c); } catch (Exception e) { System.out.println("不能构成三角形的原因:" + e.toString()); } finally { System.out.println("结束"); } } //定义一个在判断中会出现异常的方法 有参数列表 public static void TriangleTest(double a, double b, double c) { double area, p; //边不能小于0 if (a < 0 || b < 0 || c < 0) { throw new IllegalArgumentException("不能有小于0的边"); } else { if ((a + b) > c && (a + c) > b && (b + c) > a) { //计算面积 p = (a + b + c) / 2; area = sqrt(p * (p - a) + p * (p - b) + p * (p - c)); System.out.println("三角形面积是:" + area); } else { //不符合定义就要抛出异常 throw new IllegalArgumentException("输入三边的值不符合三角形的定义,不能构成三角形"); } } } }
运行结果: