自定义异常类:三角形的判断和面积

要求:

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

代码如下:

 1 package Test;
 2
 3 import java.util.Scanner;
 4
 5 class NotSanjiaoException extends Exception{
 6     /**
 7      *
 8      */
 9     private static final long serialVersionUID = 1L;
10
11     public NotSanjiaoException(String Message,Throwable Cause) {
12         super(Message,Cause);
13     }
14
15     public NotSanjiaoException(String Message) {
16         super(Message);
17     }
18
19     public NotSanjiaoException(Throwable cause) {
20         super(cause);
21     }
22 }
23
24 class Sanj{
25      double x;
26      double y;
27      double z;
28     public Sanj(double a,double b,double c) throws NotSanjiaoException {
29         x=a;
30         y=b;
31         z=c;
32         try {
33             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))34             throw new Exception("这三个三角形不能构成三角形");
35
36         }
37         catch(Exception e){
38             System.err.println("Exception handled in the method NotSanjiaoException");
39             throw new  NotSanjiaoException("出现异常",e);
40
41         }
42     }
43
44     public double getArea() {
45         double p;
46         p=(x+y+z)/2.0;
47         double s=p*(p-x)*(p-y)*(p-z);
48         s=Math.sqrt(s);
49         return  s;
50
51     }
52
53     public void showInfo() {
54         System.out.println("第一条边的长度:"+x+"第二条边的长度"+y+"第三条边的长度"+z);
55     }
56 }
57 public class Test {
58             public static void main(String[] args) {
59                 double a1,a2,a3;
60                 System.out.println("请依次输入三角形边的长度:");
61                 Scanner sc =new Scanner(System.in);
62                 a1=sc.nextDouble();
63                 a2=sc.nextDouble();
64                 a3=sc.nextDouble();
65                 sc.close();
66                 try {
67                     Sanj s = new Sanj(a1,a2,a3);
68                     double x = s.getArea();
69                     System.out.println("三角形的面积为:"+x);
70                     s.showInfo();
71                 }
72                 catch(Exception e ) {
73                     System.err.println("对不起,您输入的边长:"+a1+"  "+a2+"  "+a3+"不能构成三角形");
74
75
76                 }
77
78             }
79 }

该题一共包含三个类,其中Sanj类,用来声明三个边,以及构造函数,面积函数,显示三边大小的函数,其中构造函数里面有异常语句,try catch。其中判断是否为三角形的条件尤为重要,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)),尤其是中间的||要通过特殊方法来想。

第二个类,自定义异常类继承于Exception类,有三个构造方法,参数分别为错误信息message,错误原因cause。两个参数,共有三种构造方法。

第三个类主类,输入边长,然后构造新对象,包含异常语句。

运行结果:

toString()方法用来获取异常种类和信息;getCause()用来获取异常的原因;getMessage()用来获取异常的信息;printStackTrace在控制台打印出异常种类,错误信息和出错位置;

同时throws关键字代表可能会有异常,可以在方法的参数括号后面加 throws Exception或者用try catch语句。

在try catch中,可以有多个catch语句,在try语句中写入可能会出现的异常,当程序遇到异常后就会在catch里寻找与之对应的异常,然后进行处理,最后不管程序是否异常,都会执行到finally语句,finally语句为异常的统一出口,finally可以省略,如果不写,在catch语句执行完以后则会继续执行下面的程序。

在处理多个异常的时候需要将捕获范围小的异常放在捕捉范围大前面,否则会出现语法错误

异常语句的处理流程:

异常处理流程

原文地址:https://www.cnblogs.com/tkg1314/p/11756006.html

时间: 2024-11-10 10:19:57

自定义异常类:三角形的判断和面积的相关文章

创建一个三角形类并且通过成员函数计算三角形的周长和面积《1》

首先定义一个三角形类 class Triangle//三角形类 { public: double getA(void);//得到a的值 double getB(void);//得到b的值 double getC(void);//得到c的值 void setA(double x);//设置a的值 void setB(double y);//设置b的值 void setC(double z);//设置c的值 bool isTriangle(void);//取三边的值 double Perimeter

创建一个三角形类并且使用成员函数计算三角形的周长和面积《2》

首先创建一个三角形类 class Triangle//三角形类 { public: void Setabc(double x, double y, double z);//置三边的值,注意要能成三角形 void Getabc(double *x, double *y, double *z);//取三边的值 double Perimeter(void);//计算三角形的周长 double Area(void);//计算并返回三角形的面积 private: double a, b, c; //三边为

Throwable -抛出异常类与自定义异常类

/* 自定义异常类 java提供的异常类,不够我们使用,需要自己定义一些异常类 格式: public class XXXException extends Exception/runtimeException{ 添加一个空参数的构造方法 添加一个带异常信息的构造方法 } 注: 1.自定义异常类一般是Exception结尾,说明该类是一个异常类 2.必须继承Exception/RuntimeException */ public class RegisterException extends Ex

[转]如何编写和应用Java的自定义异常类

编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class CustomException extends Exception {    //或者继承任何标准异常类 public CustomException()  {}                //用来创建无参数对象 public CustomException(String message) {        //用来创建指定参数对象 sup

自定义异常类

/* sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun 给我 提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要 自定义异常类. 需求: 模拟feiQ上线的时候,如果没有插上网线,那么就抛出一个没有插上网线的异常, 如果已经插上了网上,那么就正常显示好友列表. 自定义异常类的步骤: 自定义一个类继承Exception即可. */ //自定义了一个没有网线的异常类了. class NoIpException extends Exception{ pub

C#高级编程八十二天----用户自定义异常类

用户自定义异常类 前面已经说了不少关于异常的问题了,现在来给大家说一下自定义异常时咋个回事以及咋样. 为啥会出现自定义异常类呢?用用脚趾头想想也明白,是为了定义咱们自己的异常,自定义异常类继承自ApplicationException 首先异常(Exception)分为两大类,一个是预定义的异常类,后者是用户自定义异常类时需要继承的类. 案例: using System; using System.Collections.Generic; using System.Linq; using Sys

PHP 错误与异常 笔记与总结(13 )自定义异常类

针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 /* 4 自定义异常类 5 */ 6 class MyException extends Exception{ 7 //重写父类构造函数 8 public function __contruct($mess

Java -- 异常的捕获及处理 -- 自定义异常类

7.4 自定义异常类 定义异常类只需要继承Exception类即可. 例:自定义异常类 Class : MyException package limeThrowable._7_4; public class MyException extends Exception { // 自定义异常类,继承Exception类 /** * */ private static final long serialVersionUID = 1L; // 构造方法接收异常信息 public MyException

定义一个长方形类,定义 求周长和面积的方法实例

/* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: import必须出现在所有的class前面.*/ import java.util.Scanner; class ChangFangXing { //长方形的长 private int length; //长方形的宽 private int width; public ChangFangXing(){} //