JAVA异常处理——三角形面积

本文介绍了一个自定义的三角形类Sanj,该类包含三个成员变量作为三角形的边长,并实现了求面积和显示三角形信息的方法。在构造方法中,通过检查边长是否能构成三角形来抛出自定义异常NotSanjiaoException,确保了数据的有效性。此外,文章还展示了如何在主方法中使用Scanner从命令行读取边长并实例化Sanj对象,同时捕获并处理可能发生的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别 给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。

import java.util.Scanner;

public class Sanj {
	 double x;
	 double y;
	 double z;
	 public Sanj(double a,double b,double c) throws NotSanjiaoException {
		 x=a;
	     y=b;
	     z=c;
	     try {
	    	 if((x>=y+z)||(x<=Math.abs(y-z))||(y>=x+z)||(y<=Math.abs(x-z))||(
	    			 z>=y+x)||(z<=Math.abs(y-x))||(x==0)||(y==0)||(z==0))
	    	 {
	    		 throw new Exception("这三个三角形不能构成三角形");
	    	 }
	     }
	     catch(Exception e){
	    	 System.err.println("Exception handled in the method NotSanjiaoException");
	         throw new  NotSanjiaoException("出现异常",e);
	     }
	 }
	    
	 public double getArea() {
		 double p;
	     p=(x+y+z)/2.0;
	     double s=p*(p-x)*(p-y)*(p-z);
	     s=Math.sqrt(s);
	     return  s;
	 }
	     
	 public void showInfo() {
		 System.out.println("第一条边的长度:"+x+"第二条边的长度"+y+"第三条边的长度"+z);
	 }
	 public static void main(String[] args) {
		 double a1,a2,a3;
		 System.out.println("请依次输入三角形边的长度:");
		 Scanner sc =new Scanner(System.in);
		 a1=sc.nextDouble();
		 a2=sc.nextDouble();
		 a3=sc.nextDouble();
		 sc.close();
		 try {
			 Sanj s = new Sanj(a1,a2,a3);
			 double x = s.getArea();
			 System.out.println("三角形的面积为:"+x);
			 s.showInfo();
		 }
		 catch(Exception e ) {
			 System.err.println("对不起,您输入的边长:"+a1+"  "+a2+"  "+a3+"不能构成三角形");                    
		 }                
	}
}
class NotSanjiaoException extends Exception{
	 private static final long serialVersionUID = 1L;
	 public NotSanjiaoException(String Message,Throwable Cause) {
	         super(Message,Cause);    
	    }
	 public NotSanjiaoException(String Message) {
	         super(Message);
	     }
	 public NotSanjiaoException(Throwable cause) {
	       super(cause);
	     }
}

toString()方法用来获取异常种类和信息;getCause()用来获取异常的原因;getMessage()用来获取异常的信息;printStackTrace在控制台打印出异常种类,错误信息和出错位置;
同时throws关键字代表可能会有异常,可以在方法的参数括号后面加 throws Exception或者用try catch语句。
在try catch中,可以有多个catch语句,在try语句中写入可能会出现的异常,当程序遇到异常后就会在catch里寻找与之对应的异常,然后进行处理,最后不管程序是否异常,都会执行到finally语句,finally语句为异常的统一出口,finally可以省略,如果不写,在catch语句执行完以后则会继续执行下面的程序。
在处理多个异常的时候需要将捕获范围小的异常放在捕捉范围大前面,否则会出现语法错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值