niknax Δημοσ. 5 Μαΐου 2008 Δημοσ. 5 Μαΐου 2008 Παίδες καλησπέρα και χρόνια πολλά σε όλους! Έχω φτιάξει ένα πρόγραμμα που δείχνει τη δυνατότητα "σύνθεσης κλάσεων".Το ερώτημα όμως είναι γιατί δεν τρέχει αφού ο compiler δεν δείχνει λάθος,αλλά και εγώ δεν μπορώ να καταλάβω τι είναι όλα αυτά που βγάζει όταν το τρέχω.. Κώδικας: //η κλάση δείχνει την Ημερομηνία Γέννησης public class Hmerominia_Gennisis { //μεταβλητές στιγμιοτύπου private int Hmera; private int Minas; private int Etos; //συνάρτηση δημιουργίας //που θα πάρει αρχικές τιμές στη public Hmerominia_Gennisis(int day,int month,int etos) { Hmera = day; Minas = month; Etos = etos; } //μέθοδος που μετατρέπει σε String τις private μεταβλητές της κλάσης public String toString() { return String.format("%d/%d/%d",Hmera,Minas,Etos); } } //2Η ΚΛΆΣΗ //η κλάση Fantaros δείχνει τα στοιχεία ταυτότητας του στρατιώτη public class Fantaros { //μεταβλητές στιγμιοτύπου private String Onoma; private String Epitheto; private Hmerominia_Gennisis Mera_Gennisis; //αναφορα σε αντικείμενο Hmerominia_Gennisis //δημιουργός κλάσης public Fantaros (String name,String epith,Hmerominia_Gennisis Hmer_Genn) { Onoma = name; Epitheto = epith; Mera_Gennisis = Hmer_Genn; // Hmerominia_Parousiasis = Hmerom_Parousiasis; //Hmerominia_Apolisis = Hmerom_Apolisis; }//τέλος δημιουργού //μέθοδος που μετατρέπει σε String τις private μεταβλητές της κλάσης public String toString() { return String.format("%s %s.\nΗμερομηνία Γέννησης: %d.\n", Onoma,Epitheto,Mera_Gennisis); } //3Η ΚΛΆΣΗ //Επίδειξη σύνθεσης των κλάσεων public class Provoli { public static void main(String[] args) { //δημουργία αντικεμένου Date με αναφορά Genethlia Hmerominia_Gennisis Genethlia = new Hmerominia_Gennisis(1,12,1984); //δημουργία αντικεμένου Fantaros με αναφορά Manos1 Fantaros Manos = new Fantaros ("Manos","Agnwstos",Genethlia); System.out.println(Manos); } }//τέλος κλάσης Provoli Ευχαριστώ όποιον μπορεί να βοηθήσει!
edhunter Δημοσ. 5 Μαΐου 2008 Δημοσ. 5 Μαΐου 2008 δε ξερω και πολλα απο φορματινγκ αλλα οπως φαινεται απο το exception καπου πρεπει να εχεις καποιο συντακτικο λαθος. παντος αν το γραψεις ετσι " return String.format("%s %s.\nHm: %s.\n", Onoma, Epitheto, Mera_Gennisis); " δεν βγαζει exception αλλα δεν ξερω αν το βγαζει οπως το θες. περιμενε να σου απαντησει και καποιος που ξερει καλυτερα.. αν θες ριξε και μια ματια εδω
elis88 Δημοσ. 5 Μαΐου 2008 Δημοσ. 5 Μαΐου 2008 την μέθοδο format δεν την ξέρω καθόλου. Αλλά αν θες απλά να το μετατρέψεις σε String γιατι να κάνεις κάτι τέτιο ενό μπορεί να γίνει πολύ απλά . π.χ. αν έχω μία μεταβλητή int x=5 και θέλω με μία μέθοδο να μου επιστραφεί σε String θα μπορουα απλά να κάνω αυτό: > public String getIntegerAsString() { return ""+x; }
ippo00 Δημοσ. 6 Μαΐου 2008 Δημοσ. 6 Μαΐου 2008 την μέθοδο format δεν την ξέρω καθόλου. Αλλά αν θες απλά να το μετατρέψεις σε String γιατι να κάνεις κάτι τέτιο ενό μπορεί να γίνει πολύ απλά . π.χ. αν έχω μία μεταβλητή int x=5 και θέλω με μία μέθοδο να μου επιστραφεί σε String θα μπορουα απλά να κάνω αυτό: > public String getIntegerAsString() { return ""+x; } toString(); ---------------------------------------- Same goes for the original poster. > System.out.println(Manos.toString(); http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintStream.html#print(java.lang.Object) If you scroll down you'll see what you get when you print an object
elis88 Δημοσ. 6 Μαΐου 2008 Δημοσ. 6 Μαΐου 2008 toString();---------------------------------------- Δεν είναι απαραίτιτο να είναι toString(). Ένα απλο παράδειγμα έφερα
ippo00 Δημοσ. 6 Μαΐου 2008 Δημοσ. 6 Μαΐου 2008 Δεν είναι απαραίτιτο να είναι toString(). Ένα απλο παράδειγμα έφερα Απλά είπα ότι υπάρχει η μεθοδός οπότε δεν πρέπει να την ξαναφτιάχνει.
alex2005 Δημοσ. 6 Μαΐου 2008 Δημοσ. 6 Μαΐου 2008 H μέθοδος toString() είναι η default μέθοδος που κληρονομείται από την τάξη Object. Αυτό δεν σημαίνει πως θα έχει την συμπεριφορά που θέλει ο προγραμματιστής καθώς συνήθως εκτυπώνει μόνο το hash code της τάξης. Για την ακρίβεια: The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of: getClass().getName() + '@' + Integer.toHexString(hashCode()) Οπότε είναι αρκετά σύνηθες να κάνει ο προγραμματιστής override την μέθοδο αυτή για να έχει και τα επιθυμητά αποτελέσματα,κυρίως για debugging λόγους ή γιατί το απαιτεί η εργασία πολλές φορές
georgemarios Δημοσ. 7 Μαΐου 2008 Δημοσ. 7 Μαΐου 2008 > public String toString() { return String.format("%s %s.\nΗμερομηνία Γέννησης: %d.\n", Onoma,Epitheto, ---> Mera_Gennisis <---- ); } ζητας απο τη format() να αντιμετοπισει ενα αντικειμενο τυπου Hmerominia_Gennisis ως ακεραιο (%d) μαλλον κατι τετοιο επρεπε να πεις > public String toString() { return String.format("%s %s.\nΗμερομηνία Γέννησης: %s.\n", Onoma,Epitheto, Mera_Gennisis.toString() ); } παρατηρησε πως πλεον το 3ο ορισμα δεν ειναι το Mera_gennisis αλλα το String αποτελέσμα που επιστρεφει η toString() του Mera_gennisis
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.