如何编写语句来检查我的用户指定的异常 CustomerNotEnrolledException
How to write a statement to check for my user specified exception CustomerNotEnrolledException
我之前写过一个完整的成功程序,由 7 classes(Date
, Address
, Time
, Customer
, Course
、InClassCourse
、OnLineCourse
)、接口 (Invoice
),当然还有测试 class (CustomerTest
)。接口 Invoice
有一个方法 createInvoice
在 Customer
class 中实现。在测试用例中,我创建了3个新客户,添加了他们各自的课程,然后根据他们注册的课程数量、注册课程的类型以及class是否是一个来计算他们的费用。 InClassCourse
或OnLineCourse
,最后打印出一个对话框的信息。客户和课程列表保存在两个单独的数组列表中:
ArrayList<Customer> customerList = new ArrayList<Customer>();
ArrayList<Course> courseList = new ArrayList<Course>();
使用增强的 for 循环,我以多态方式遍历了 customerList
并为每个客户创建了发票。
我现在已经写了一个额外的 class CreateFiles
,包含一个新的客户和课程列表,将客户数据写入文件 customers.txt 和课程数据到文件 courses.txt。 CreateFiles
有一个方法 writeCustomers
和 writeCourses
.
我是异常的新手,仍在学习中。要修改我的程序,我想添加一个名为 CustomerNotEnrolledException
的用户指定异常。 Customer
class 中的 createInvoice
方法将抛出 CustomerNotEnrolledException
如果客户在他的列表中没有任何课程(我的几个客户没有参加任何课程),然后在我的测试中处理这个异常 class.
我的问题是如何在 try 块中编写语句来检查客户是否注册了任何课程,如果没有则将其淘汰。 我需要这样做是因为在我排除了未注册的客户之后,我将在测试用例中添加方法 readCustomers
、readCourses
和 generateInvoice
并使用它们来读取 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()
方法一样。
我之前写过一个完整的成功程序,由 7 classes(Date
, Address
, Time
, Customer
, Course
、InClassCourse
、OnLineCourse
)、接口 (Invoice
),当然还有测试 class (CustomerTest
)。接口 Invoice
有一个方法 createInvoice
在 Customer
class 中实现。在测试用例中,我创建了3个新客户,添加了他们各自的课程,然后根据他们注册的课程数量、注册课程的类型以及class是否是一个来计算他们的费用。 InClassCourse
或OnLineCourse
,最后打印出一个对话框的信息。客户和课程列表保存在两个单独的数组列表中:
ArrayList<Customer> customerList = new ArrayList<Customer>();
ArrayList<Course> courseList = new ArrayList<Course>();
使用增强的 for 循环,我以多态方式遍历了 customerList
并为每个客户创建了发票。
我现在已经写了一个额外的 class CreateFiles
,包含一个新的客户和课程列表,将客户数据写入文件 customers.txt 和课程数据到文件 courses.txt。 CreateFiles
有一个方法 writeCustomers
和 writeCourses
.
我是异常的新手,仍在学习中。要修改我的程序,我想添加一个名为 CustomerNotEnrolledException
的用户指定异常。 Customer
class 中的 createInvoice
方法将抛出 CustomerNotEnrolledException
如果客户在他的列表中没有任何课程(我的几个客户没有参加任何课程),然后在我的测试中处理这个异常 class.
我的问题是如何在 try 块中编写语句来检查客户是否注册了任何课程,如果没有则将其淘汰。 我需要这样做是因为在我排除了未注册的客户之后,我将在测试用例中添加方法 readCustomers
、readCourses
和 generateInvoice
并使用它们来读取 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
:
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()
方法一样。