异常处理设计问题(java实训)

文章介绍了如何在Java中实现MyMath类的trianglearea方法,用于计算给定三角形三边长度的面积,同时处理负数参数和无法构成三角形的异常情况。

题目:

我们能够通过海伦公式计算已知一个三角形三边长度的三角形面积,如果三角形的三边长为a,b,c,三角形的面积计算公式描述如下:

        S=√p (p-a) (p-b) (p-c)

        p=(a+b+c)/2

      要求你完成MyMath对象中的trianglearea法的实现,如果参数a,b,c的值不能构成一个三角形,使用异常进行处理,产生无效三角形异常,如果a,b,c中有负数,产生参数无效异常,根据题目要求请你完成异常类型和MyMath类型的设计。MyMath设计代码如下:

import java.util.*;
public class MyMath
{
    public static double trianglearea(double a,double b,double c)
    throws NotTriAngleException,NegativeArgementsException{
    //判定a,b,c是否全为正数
 
    //判定a,b,c是否能构成三角形
 
    //计算三角形面积
    double s;
}
public static void main(String[] args)
{
    double a,b,c;
    int N;
    Scanner sc= new Scanner(System.in);
    N = sc.nextInt();
    for(int i=0;i<N;i++){
        a=sc.nextDouble();
        b=sc.nextDouble();
        c=sc.nextDouble();
        System.out.printf("%.2f\n",MyMath.trianglearea(a,b,c));
    }
}
 
class NotTriAngleException extends Exception
{
}
 
class NegativeArgementsException extends Exception
{
}
  输入:
      输入的第一行为一个正整数N(N>0),表示以下有N行数据,每行为一个三角形边的输入信息,原则上是由空格隔开的三个浮点数,但也可能由于输入错误产生非正常情况。
  输出:
      如果某行三角形边数据能读入三个浮点数,输出方法trianglearea计算结果,保留2位小数,如果发生异常直接输出异常信息;每个三角形计算信息使用一行输出;如果某行三角形边数据读入出现问题,直接退出程序的运行。

测试1输入:
3
3 4 5.0
1 1 2
 -2 4.0 3
测试1输出:
6.00
Not TriAngle
Negative Argements

测试2输入:    
3
3 4 5.0
1a 1 2
-2 4.0 3

测试2输出:
6.00

代码:

import java.util.*;
public class Xingyuxingxi
{
    public static void main(String[] args)
    {
        String A,B,C;
        int N;
        Scanner sc= new Scanner(System.in);
        N = sc.nextInt();
        sc.nextLine();
        boolean br=false;
        for(int j=0;j<N;j++){
            String E=sc.nextLine();
            String[] zm=E.split(" ");
            A=zm[0];
            B=zm[1];
            C=zm[2];
            for(int i=0;i<=A.length()-1;i++)
            {
                if((A.charAt(i)>='a'&&A.charAt(i)<='z')||(A.charAt(i)>='A'&&A.charAt(i)<='Z')) br=true;//因为可能会出现字母
            }
            for(int i=0;i<=B.length()-1;i++)
            {
                if((B.charAt(i)>='a'&&B.charAt(i)<='z')||(B.charAt(i)>='A'&&B.charAt(i)<='Z')) br=true;
            }
            for(int i=0;i<=C.length()-1;i++)
            {
                if((C.charAt(i)>='a'&&C.charAt(i)<='z')||(C.charAt(i)>='A'&&C.charAt(i)<='Z')) br=true;
            }
            if(br==true) break;
            double a=Double.parseDouble(A);
            double b=Double.parseDouble(B);
            double c=Double.parseDouble(C);
            double p=(a+b+c)/2;
            if(a<=0||b<=0||c<=0)//a和b和c不能小于0
            {
                System.out.printf("Negative Argements\n");
            }
            else if((a+b<=c)||(a+c<=b)||(c+b<=a))//两边之和应该大于第三边
            {
                System.out.printf("Not TriAngle\n");
            }
            else {
                System.out.printf("%.2f\n", Math.sqrt(p * (p - a) * (p - b) * (p - c)));
            }
        }
    }
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星与星熙.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值