Φωτογραφία Γιάννης Δρόσος
Enumerated Types
από Γιάννης Δρόσος - Friday, 30 April 2010, 7:40 AM
 
Καλημέρα,
Προσπαθώ να μεταφέρω το παράδειγμα που υπάρχει στις σημειώσεις στις σελίδες 125-126. Η μόνη μου διαφοροποίηση είναι οτι σε αντίθεση με το παράδειγμα δημιουργώ 2 κλάσεις. Η μία ονομάζεται enumTest και περιλαμάνει τη δήλωση του Day και τον ορισμό της μεθόδου και η enumMain αποτελεί τη main κλάση από όπου θέλω να καλέσω τη μέθοδο tellItLikeItIs(). Καθώς δηλώνω στη main το enumTest firstDay = new enumTest(Day.Monday); το πρώτο μήνυμα που παίρνω είναι σχετικά με το Day το οποίο αναφέρει τα εξής: "cannot find symbol". Παρακάμπτοντας το μήνυμα αυτό και καλώ την μέθοδο tellItLikeItIs() και εκτελώ την main. Τότε λαμβάνω απο τον compiler το παρακάτω μήνυμα "Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
  symbol:   variable Day
  location: class KefalaioMethodoi.enumMain
        at KefalaioMethodoi.enumMain.main(enumMain.java:20)
Java Result: 1"
Προσπαθώ να καταλάβω που είναι το λάθος και δυσκολεύομαι. Οποιαδήποτε βοήθεια δεκτή. Σας ευχαριστώ εκ των προτέρων.  
 
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Enumerated Types
από Νικόλαος Πανάγος - Friday, 30 April 2010, 8:00 AM
 
Καλημέρα Γιάννη,

νομίζω πως έχω καταλάβει γιατί δεν παίζει ο κώδικας, αλλά για να σιγουρευτούμε και να σου πως ακριβώς ποιο είναι το πρόβλημα κάνε μου σε παρακαλώ attach σε ένα post τα αρχεία .java
Φωτογραφία Παναγιώτης ΚΑΛΟΓΕΡΟΠΟΥΛΟΣ
Απάντηση: Enumerated Types
από Παναγιώτης ΚΑΛΟΓΕΡΟΠΟΥΛΟΣ - Friday, 30 April 2010, 8:11 AM
 
Δεν τρέχει γιατί δεν έχει δημιουργήσει ένα αντικείμενο Day στη main Class?
Δηλαδή Day d = new Day(); και μετά να πει EnumTest(d.MONDAY);
Καλημέρα σε όλους κιόλας!
Φωτογραφία Γιάννης Δρόσος
Απάντηση: Enumerated Types
από Γιάννης Δρόσος - Friday, 30 April 2010, 9:40 AM
 
Η αλήθεια είναι οτι δεν έφτιαξα αντικείμενο στην main για το Day αλλά τώρα που το δοκίμασα βλέπω οτι δεν παίζει. Αυτο που λειτουργεί και δεν δημιουργεί κανένα πρόβλημα στην εκτέλεση της κλάσης είναι όταν δηλώνω                                                      enumTest fifthday = new enumTest(enumTest.Day.FRIDAY);
Φωτογραφία Παναγιώτης ΚΑΛΟΓΕΡΟΠΟΥΛΟΣ
Απάντηση: Enumerated Types
από Παναγιώτης ΚΑΛΟΓΕΡΟΠΟΥΛΟΣ - Friday, 30 April 2010, 1:23 PM
 

Βασικά , αν έχω καταλάβει καλά, στο παράδειγμα στις σημειώσεις η enum Day είναι δηλωμένη σε ξεχωριστό αρχείο. Έκανα το ίδιο κ με το αρχείο σου Γιάννη (το στέλνω στο zip), όπου η λύση είναι ίδια, απλά έχω βάλει σε σχόλια τη δήλωση της enum μέσα στην enumTest, και τη δήλωση της enum την έκανα σε ξεχωριστό αρχείο. Απλά δημιουργείς ένα αντικείμενο Day στη main και το στέλνεις στον constructor της enumTest. Εσύ είχες δηλώσει μέσα στη enumTest την Day,και για αυτό έπρεπε να την καλέσεις enumTest fifthday = new enumTest(enumTest.Day.FRIDAY); . Να πω την αλήθεια μπερδεύτηκα έτσι όπως την κάλεσες, αν το έχεις ξεκαθαρίσει εξήγησέ το μου σε παρακαλώ, ειδάλλως θα μας το ξεκαθαρίσει  ο Νίκος.

Χαιρετώ!!

Φωτογραφία Γιάννης Δρόσος
Απάντηση: Enumerated Types
από Γιάννης Δρόσος - Friday, 30 April 2010, 12:22 PM
 
Καλημέρα Νίκο,
είδα πρώτα το μήνυμα του Παναγιώτη και τώρα είδα το δικό σου. Σου στέλνω τον κώδικα χωρίς την διόρθωση που έκανα.
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Enumerated Types
από Νικόλαος Πανάγος - Friday, 30 April 2010, 1:31 PM
 
Έγινε, κανένα πρόβλημα, θα το δω και επιστρέφω σε λίγο με την απάντηση!
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Enumerated Types
από Νικόλαος Πανάγος - Friday, 30 April 2010, 2:00 PM
 
Γιάννη και Παναγιώτη,

ο κώδικας θα παίξει αν γράψεις στην enumMain το statement:

import KefalaioMethodoi.enumTest.Day;

Έχοντας δηλώσει το enum μέσα στην κλάση enumTest λειτουργεί ως εσωτερική κλάση, τις οποίες εξετάζουμε στην επόμενη ενότητα. Στο παράδειγμα των σημειώσεων, το enum Day το έχω ορίσει σε ξεχωριστό δικό του αρχείο, οπότε και θα παίξει απροβλημάτιστα.
Οι εσωτερικές κλάσεις έχουν πολλές ιδιαιτερότητες και δημιουργούν διάφορα προβλήματα στον κώδικα και καλό είναι να αποφεύγονται. Τις χρησιμοποιούμε για συγκεκριμένα πράγματα, όπως για να γράψουμε event handlers σε στοιχεία GUI, πράγματα που θα δείτε στην τελευταία ενότητα του σεμιναρίου.

Κάποιες παρατηρήσεις μου για τον κώδικά σου είναι πως θα πρέπει πάντα να ονομάζεις τα πακέτα με πεζούς χαρακτήρες, το πρώτο γράμμα των κλάσεων να είναι πάντα κεφαλαίο και να προσέξεις λίγο τη στοίχιση του κώδικα. Ξέρω πως το συγκεκριμένο κομμάτι που μου έστειλες ήταν απλό 'ψάξιμο' αλλά αν δεν προσέξεις αυτά τα πραγματάκια από τώρα, θα είναι πολύ δύσκολο να τα διορθώσεις στη συνέχεια. Αυτό ισχύει φυσικά για όλους.

ΝΠ