2015-12-05 16 views
5

Mam klasy, teraz jestem zmieniając setter rzucić wyjątek, jeśli nieprawidłowy wprost wartość w Wymaga:.wyjątek jeśli nieprawidłowa wartość jest przekazywana w

  • A. (Wskazana dueDay musi należeć do zakresu od 1 do 31, a dueMonth musi należeć do zakresu od 1 do 12.) Nie można traktować wyjątku metodami ustawiającymi.
  • B. Zmień główną metodę z TodoItem, aby prosiła użytkownika o zadanie, dzień i miesiąc, i zapisuje tę informację jako nową TodoItem.
  • C. Zmień konstruktor tak, aby był nazywany twoimi nowymi metodami ustawiającymi. Jeśli zostanie zgłoszony wyjątek, należy go obsłużyć metodą główną. Należy poinformować użytkownika, że ​​wprowadził nieprawidłowy dzień lub miesiąc i poprosił o poprawny.

Moja klasa jest:

(I już zmienił setter rzucić wyjątek, jednak nie działa, myślę, że powinienem zmienić konstruktora główną funkcją jest jednak nie wiem jak zrobić)

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()); 
    } 
+0

Proponuję rzucić 'IllegalArgumentException' –

+0

@PeterLawrey To ma znaczenia dla zmiany tego? –

+0

Nie jest dobrym pomysłem użycie ogólnego "wyjątku". Lepiej jest użyć wyjątku, który jest zwykle używany w tym przypadku. Również wyjątek IllegalArgumentException jest niesprawdzonym wyjątkiem, z którym początkujący mogą łatwiej pracować. –

Odpowiedz

1

however, it doesn't work,

Definiujesz klasę TodoItem, ale w main() tworzysz TodoItemDone. Kiedy zmienić TodoItem do TodoItemDone, mam wyniki:

The 6 items are: 
null, due: 3/12, todo 
null, due: 3/16, todo 
null, due: 3/21, todo 
Buy groceries, due: 0/0, todo 
Clean bathroom, due: 0/0, todo 
Study for myself, due: 0/0, todo 

Setting due dates and months on the last 3: 
Exception in thread "main" java.lang.Exception: Error: invalid due day 
    at com.github.vedenin.TodoItemDone.setDueDay(TodoItemDone.java:61) 
    at com.github.vedenin.TodoItemDone.main(TodoItemDone.java:120) 

Wyjątek rzucają poprawnie

1

zmienić tę część.

public TodoItem(String taks,int day,int month) { 
    this.task = task; 
    dueDay = day; 
    dueMonth = month; 
    isDone = false; 

    numItems++; 
} 

do tego:

public TodoItem(String task,int day,int month) { 
    this.task = task; 
    dueDay = day; 
    dueMonth = month; 
    isDone = false; 

    numItems++; 
} 

Nie ustawiasz this.task, aby poprawić wejściowy argument taks. Zmieniam nazwę argumentu. może to nie był główny problem, ale spróbuj go zmienić.

+0

Dziękuję, ale nadal ma problem. 6 pozycji to: Wyjątek w wątku "główny" java.lang.Error: Nierozwiązany problem kompilacji: \t a nie można rozstrzygnąć na zmienną –

+0

czy na pewno zmieniłeś 'taks' na' task'? ponieważ myślę, że 6 wyjątków jest dokładnie dla metody TodoItem. – MHSFisher

Powiązane problemy