如何编写语句来检查我的用户指定的异常 CustomerNotEnrolledException

How to write a statement to check for my user specified exception CustomerNotEnrolledException

我之前写过一个完整的成功程序,由 7 classes(Date, Address, Time, Customer, CourseInClassCourseOnLineCourse)、接口 (Invoice),当然还有测试 class (CustomerTest)。接口 Invoice 有一个方法 createInvoiceCustomer class 中实现。在测试用例中,我创建了3个新客户,添加了他们各自的课程,然后根据他们注册的课程数量、注册课程的类型以及class是否是一个来计算他们的费用。 InClassCourseOnLineCourse,最后打印出一个对话框的信息。客户和课程列表保存在两个单独的数组列表中:

ArrayList<Customer> customerList = new ArrayList<Customer>();
ArrayList<Course> courseList = new ArrayList<Course>();

使用增强的 for 循环,我以多态方式遍历了 customerList 并为每个客户创建了发票。 我现在已经写了一个额外的 class CreateFiles,包含一个新的客户和课程列表,将客户数据写入文件 customers.txt 和课程数据到文件 courses.txtCreateFiles 有一个方法 writeCustomerswriteCourses.

我是异常的新手,仍在学习中。要修改我的程序,我想添加一个名为 CustomerNotEnrolledException 的用户指定异常。 Customer class 中的 createInvoice 方法将抛出 CustomerNotEnrolledException 如果客户在他的列表中没有任何课程(我的几个客户没有参加任何课程),然后在我的测试中处理这个异常 class.

我的问题是如何在 try 块中编写语句来检查客户是否注册了任何课程,如果没有则将其淘汰。 我需要这样做是因为在我排除了未注册的客户之后,我将在测试用例中添加方法 readCustomersreadCoursesgenerateInvoice 并使用它们来读取 customers.txt 文件和 courses.txt 文件来创建客户并将他们添加到 customerList,以及创建课程,这将被添加到他们各自的客户中。

我已经创建了一个名为 CustomerNotEnrolledException 的异常 class 来扩展异常:

  public class CustomerNotEnrolledException extends Exception
  {
      public CustomerNotEnrolledException()
      {
         super("Customer not enrolled");
      }

我原来的 createInvoice 方法如下所示:

    public String createInvoice() 
    {       
            double total;

        if (cType==CustomerType.STUDENT)
            total = 25;
               else if (cType==CustomerType.FACULTY)
            total = 50;
               else if (cType==CustomerType.GOVERNMENT)
            total = 35;
        else
            total = 0;

       for(Course course:this.courseList)
       {
           total += course.calculateCharge(this.cType); 
       }  

           return (String.format("%s\t\t%d\t\t$%.2f", this.name,      
               this.accountNumber,total));    
    }

我相信你可以将 'Exception' 扩展到新创建的 class 中,看起来有点像这样。

public class CustomerNotEnrolledException extends Exception {

      public CustomerNotEnrolledException(String message) {
           super(message);
      }

      public CustomerNotEnrolledException(String message, Throwable throwable) {
           super(message, throwable);
      }

}

然后将此异常导入到您打算使用它的 class 中。

首先,修改你的方法createInvoice()如下:

public String createInvoice() throws CustomerNotEnrolledException {

    if ((this.courseList == null) || (this.courseList.isEmpty())) {
        throw new CustomerNotEnrolledException("Customer does not have any course");
    }

    // rest of your method goes here
}

然后,在每个调用 createInvoice() 方法的 class 中,您必须用捕获 CustomerNotEnrolledException:

的 try 块包围调用
Customer customer = ...; // get the customer from some place
try {

    // some code here

    customer.createInvoice();

    // more code here

} catch (CustomerNotEnrolledException e) {
    // handle CustomerNotEnrolledException here, maybe show error message?
    System.out.println("Exception creating invoice for customer " + customer.getName() + ": " + e.getMessage());
}

想法是,如果 createInvoice() 在他的课程列表中没有任何课程,则会抛出 CustomerNotEnrolledException。这只是对应该发生什么的猜测,因为我事先不知道问题所在。而且,我相信正确地实现逻辑是你的工作。

由于createInvoice()方法抛出checked异常,在本例CustomerNotEnrolledException中,调用createInvoice()的方法must 处理 CustomerNotEnrolledException 异常,或者使用我在示例中显示的 try/catch 块,或者通过声明该方法在其签名中抛出 CustomerNotEnrolledException (就像 createInvoice() 方法一样。