Εργασία 3 Γλώσσα Java [2007-2008]

Διδάσκοντες: Π. Εφραιμίδης, Λέκτορας

Εργασία 3 Γλώσσα Java [2007-2008]

Δημοσίευσηαπό cardjuggler » 02 Ιουν 2008, 03:55

Προσπαθώ να συλλάβω (catch) τις EmptyListException και InvalidIndexException, αλλά πειραματιζόμενος με τον κώδικα δεν μπόρεσα καν να τις επιτύχω.  Αντί αυτών μου επιστρέφεται η εξαίρεση NullPointerException, π.χ. στην κλήση της lastNode(), κάτι που θεωρώ λογικό βάσει του κώδικα που δίνεται (ίδιο σε λογική με αυτόν που παρέδωσα στην προηγούμενη εργασία).

Η ερώτησή μου είναι αν μπορώ να επέμβω στον κώδικα της MyList ώστε να καταφέρω να εμφανίσω τις ζητούμενες εξαιρέσεις (ή αν κάτι μου διαφεύγει λόγω της περασμένης ώρας ενασχόλησης με την εργασία :P ).

Ευχαριστώ προκαταβολικά.
Τελευταία επεξεργασία από megatron και 05 Ιουν 2010, 14:18, έχει επεξεργασθεί 1 φορά/ες συνολικά
Αιτία: Προσθήκη μαθήματος & ακαδημαϊκού έτους στον τίτλο
"Before you diagnose yourself with depression or low self- esteem, first make sure that you are not, in fact, just surrounded by assholes." - William Gibson
Άβαταρ μέλους
cardjuggler
Newbie
 
Δημοσιεύσεις: 9
Εγγραφή: 17 Μάιος 2008, 17:19
Φοιτητής ΗΜΜΥ: Ναι

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό JoKo » 02 Ιουν 2008, 14:12

Μπορείς να μας δείξεις τον κώδικα για να μπούμε καλύτερα στο κλίμα;
Τελευταία επεξεργασία από JoKo και 02 Ιουν 2008, 14:20, έχει επεξεργασθεί 1 φορά/ες συνολικά
Άβαταρ μέλους
JoKo
Full Member
 
Δημοσιεύσεις: 128
Εγγραφή: 09 Ιαν 2008, 22:33
Τοποθεσία: Athens, Greece

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό cmavr8 » 02 Ιουν 2008, 20:40

Αρχικά, η EmptyListException σε ποιο πακέτο βρίσκεται?
Προσπαθούμε να την κάνουμε import αλλά δεν ξέρουμε που είναι!
cmavr8
Hero Member
 
Δημοσιεύσεις: 519
Εγγραφή: 17 Μάιος 2008, 16:15
Φοιτητής ΗΜΜΥ: Ναι

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό cmavr8 » 04 Ιουν 2008, 14:06

Λοιπόν, φτιάξαμε την EmptyListException σε ένα ξεχωριστό αρχείο:

Κώδικας: Επιλογή όλων
package dsalg.ergasia3.list;

import java.lang.Exception;

public class EmptyListException extends Exception {
   
}


Και έχουμε την κλάση MyList, που υλοποιεί διασυνδεδεμένη λίστα. Θέλουμε αντί για isempty, να πετάγεται exception όταν πάει να βγει κάτι από empty λίστα.

Παραθέτω τις τρεις συναρτήσεις που μάλλον είναι κρίσιμες:


Κώδικας: Επιλογή όλων
   public void add(int data) {
      MyListNode node = new MyListNode();
      node.data = data;
      addNode(node);
   }

   public void addNode(MyListNode node) throws EmptyListException{
      node.next = null;
      if (head == null) {
         // list is empty, create the first node
         head = node;
      } else {
         MyListNode last = lastNode();
         last.next = node;
      }
   }

   protected MyListNode lastNode() throws EmptyListException{
      MyListNode node = head;

      if (node == null) {
         // list empty
         throw new EmptyListException();
      //   return null;
      } else {
         while (node.next != null)
         {
            node = node.next;
         }

      return node;
      }
   }


Αν έχω καταλάβει καλά, πρέπει μέσα στη MyList, κάπου να γίνεται throw το exception, και μέσα στη main μου να γίνεται το try/catch?
Τελευταία επεξεργασία από cmavr8 και 04 Ιουν 2008, 14:13, έχει επεξεργασθεί 1 φορά/ες συνολικά
cmavr8
Hero Member
 
Δημοσιεύσεις: 519
Εγγραφή: 17 Μάιος 2008, 16:15
Φοιτητής ΗΜΜΥ: Ναι

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό James » 04 Ιουν 2008, 14:37

cmavr8 έγραψε:Αν έχω καταλάβει καλά, πρέπει μέσα στη MyList, κάπου να γίνεται throw το exception, και μέσα στη main μου να γίνεται το try/catch?


Καλά έχεις καταλάβει. Το throw, όπως φαίνεται γίνεται ήδη από τη lastNode() οπότε δε χρειάζεται να παρέμβεις στον κώδικα. Στη main σου θα πρέπει να "περιβάλλεις" την κλήση στη συνάρτηση lastNode() με try block.

Κώδικας: Επιλογή όλων
MyList MyListObject = new ΜyList();
try {
   MyListObject.lastNode(); //auti kanei throw an einai adeia i lista
} catch (EmptyListException e) {
   Console.PrintLine("Empty list"); //xeirismos tou exception me kapoion tropo
}
(Μόνο) James
Άβαταρ μέλους
James
Διαχειριστής
 
Δημοσιεύσεις: 1740
Εγγραφή: 08 Ιαν 2008, 22:29
Φοιτητής ΗΜΜΥ: Όχι

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό cmavr8 » 04 Ιουν 2008, 14:43

Ευχαριστώ πολύ για την απάντηση!

Το θέμα έιναι ότι την lastnode δεν την χειρίζομαι "εγώ", από τη main. Εγώ το μόνο που κάνω έιναι add(int). Η add καλεί την addnode, και αυτή με τη σειρά της τη lastnode. Οπότε η add παραπονιέται ότι "Unhandled exception type EmptyListException"

Τα throw που βλέπεις στην addnode kai lastnode είναι δικά μου. Ίσως δε θα έπρεπε να έχει η addnode αλλά μόνο η lastnode.

Μήπως πρέπει η addnode kai add να έχουν try/catch blocks?
cmavr8
Hero Member
 
Δημοσιεύσεις: 519
Εγγραφή: 17 Μάιος 2008, 16:15
Φοιτητής ΗΜΜΥ: Ναι

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό James » 04 Ιουν 2008, 14:47

Η φιλοσοφία ίδια είναι σε κάθε περίπτωση. Αφού εξωτερικά καλείς την addnode θα πρέπει να δηλώσεις ρητά ότι παράγει exception

Κώδικας: Επιλογή όλων
public void add(int) throws EmptyListException { }


και να κάνεις αυτήν catch.
Τελευταία επεξεργασία από James και 04 Ιουν 2008, 14:51, έχει επεξεργασθεί 1 φορά/ες συνολικά
(Μόνο) James
Άβαταρ μέλους
James
Διαχειριστής
 
Δημοσιεύσεις: 1740
Εγγραφή: 08 Ιαν 2008, 22:29
Φοιτητής ΗΜΜΥ: Όχι

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό cmavr8 » 04 Ιουν 2008, 14:55

Άπαιχτος Mr James!
Ευχαριστούμε πολύ!

Το έπιασα τώρα καλύτερα.
Το δουλεύω, αν κολλήσω κάπου θα σου πω.

Thanks so much
cmavr8
Hero Member
 
Δημοσιεύσεις: 519
Εγγραφή: 17 Μάιος 2008, 16:15
Φοιτητής ΗΜΜΥ: Ναι

Re: Ερώτηση: εργασία 3, ερώτημα 4

Δημοσίευσηαπό cardjuggler » 04 Ιουν 2008, 16:00

Έγινε, δουλεύει.  Ευχαριστούμε και πάλι sir James  :)
"Before you diagnose yourself with depression or low self- esteem, first make sure that you are not, in fact, just surrounded by assholes." - William Gibson
Άβαταρ μέλους
cardjuggler
Newbie
 
Δημοσιεύσεις: 9
Εγγραφή: 17 Μάιος 2008, 17:19
Φοιτητής ΗΜΜΥ: Ναι

Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης