【发布时间】:2015-12-05 22:10:45
【问题描述】:
我有一个类,现在我正在更改设置器以在传入无效值时抛出异常。 它需要:
- A. (
dueDay必须介于 1 和 31 之间,dueMonth必须介于 1 和 12 之间。)setter 方法中不处理异常显示。 - 乙。更改
TodoItem的主要方法,使其向用户询问任务、到期日和到期月份,并将此信息存储为新的TodoItem。 - C.更改构造函数,以便将其称为新的 setter 方法。如果抛出异常,应该在main方法中处理。应该告诉用户他们输入了无效的日期或月份,并要求输入正确的日期或月份。
我的班级是:
(我已经改了setter抛出异常,但是不行,我想我应该改一下main函数的构造函数,但是我不知道怎么做。)
public class TodoItem {
private String task;
private int dueMonth;
private int dueDay;
private boolean isDone;
// class variables
private static int numItems;
private static int numDone;
// constructor
public TodoItem(String taks,int day,int month) {
this.task = task;
dueDay = day;
dueMonth = month;
isDone = false;
numItems++;
}
// second constructor
public TodoItem(String task) {
this.task = task;
isDone = false;
numItems++;
}
public static void WriteToFile(String a){
a="toString.txt";
String task;
int dueMonth;
int dueDay;
boolean isDone;
}
// toString method
public String toString() {
return a+task + ", due: " + dueMonth + "/" + dueDay + (isDone?", done":", todo");
}
// getters
public int getDueDay() {
return dueDay;
}
public int getDueMonth() {
return dueMonth;
}
// setters
public void setDueDay(int day) throws Exception {
if (day >= 1 && day <=31) {
dueDay = day;
}
else {
throw new Exception ("Error: invalid due day");
}
}
public void setDueMonth(int month) throws Exception{
if (month >= 1 && month <= 12) {
dueMonth = month;
}
else {
throw new Exception("Error: invalid due month");
}
}
// Checks off an item as being done.
// If the item was already marked as done, don't increase the counter
// (this was not specified in the problem set instructions).
public void markAsDone() {
if (!isDone) {
isDone = true;
numDone++;
}
}
// returns the percentage of to-do list items completed
public static double percentDone() {
return (double) numDone/numItems*100;
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// constructor 1
TodoItemDone item1 = new TodoItemDone("Walk dog",12,3);
TodoItemDone item2 = new TodoItemDone("Do 326 project",16,3);
TodoItemDone item3 = new TodoItemDone("Put away winter boots",21,3);
// constructor 2
TodoItemDone item4 = new TodoItemDone("Buy groceries");
TodoItemDone item5 = new TodoItemDone("Clean bathroom");
TodoItemDone item6 = new TodoItemDone("Study for myself");
// toString (and verify constructors)
System.out.println("The 6 items are:");
System.out.println(item1);
System.out.println(item2);
System.out.println(item3);
System.out.println(item4);
System.out.println(item5);
System.out.println(item6);
System.out.println();
System.out.println("Setting due dates and months on the last 3:");
// setDueDay
item4.setDueDay(1);
item5.setDueDay(5);
item6.setDueDay(52);
// setDueMonth
item4.setDueMonth(12);
item5.setDueMonth(6);
item6.setDueMonth(0);
System.out.println("The last 3 items are now:");
System.out.println(item4);
System.out.println(item5);
System.out.println(item6);
// Test percentDone() and markAsDone()
System.out.println();
System.out.println("About to complete some items:");
System.out.println("percent done: " + percentDone());
item1.markAsDone();
System.out.println("Item 1 is now: " + item1);
System.out.println("percent done: " + percentDone());
item1.markAsDone();
System.out.println("Item 1 is now: " + item1);
System.out.println("percent done: " + percentDone());
item2.markAsDone();
System.out.println("Item 2 is now: " + item2);
System.out.println("percent done: " + percentDone());
}
【问题讨论】:
-
我建议你扔一个
IllegalArgumentException -
@PeterLawrey 改变这个重要吗?
-
使用通用的
Exception不是一个好主意。最好使用在这种情况下通常使用的异常。此外,IllegalArgumentException 是一个未经检查的异常,初学者发现它更容易使用。