bazinga13 Δημοσ. 28 Φεβρουαρίου 2014 Δημοσ. 28 Φεβρουαρίου 2014 Την καλησπερα μου φιλοι μου,ειναι το δευτερο μου ποστ εδω περα και οπως ειχα γραψει στο πρωτο μου ποστ ειμαι 42 ετων και πριν μια δεκαετια αρχισα να μαθαινω C σαν χομπυ αλλα μετα λογο ελειψης χρονου τα παρατησα και φετος ειπα να μαθω java,εχω τωρα μια βδομαδα-δεκα μερες που ασχολουμαι και εχω λιωσει στο ψαξιμο,τελικα ειναι μεγαλο θεμα να μαθαινεις μονος σου,ειναι απιστευτα χρονοβορο,διλαδη μια δουλεια που θα στην πει καποιος σε 3 λεπτα εσενα μπορει να σου παρει 3 ωρες ψαξιμο να το βρεις,για παραδειγμα με το ξεκινησα εψαχνα να βρω πως θα τυπωσω κατι στην οθονη και μετα πως θα εισαγω μια τιμη απ το πληκτρολογιο,απογητευτικα λιγο διοτι στην C αυτο το εκανα με μια απλη scanf ενω εδω περα μου φαγε δεν ξερω κι εγω ποση ωρα να το βρω και τελικα ητανε και ολοκληρη ιστορια,δεν ξερω αν υπαρχει αλλος τροπος η αν ειναι σωστος ο τροπος που βρηκα,ειναι το εξης package MyPackage;import java.util.Scanner;public class myclass { public static void main(String[] args) { int a; Scanner in = new Scanner(System.in); System.out.println("Enter an integer"); a = in.nextInt(); System.out.println("You entered integer "+a); }} αλλο ενα μικρο προβλημα που αντιμετωπησα και ψαχνωντας δεν βρηκα λυση και το παρατησα ειναι να διαβασεις εναν χαρακτηρα και να τον τυπωσεις,οι πιο πολυ λεγανε να το κανεις αυτο μ ενα string αλλα δεν καταλαβα τον λογο,εγω εκανα το εξης αλλα δεν δουλεψε char ch;System.out.println("Enter a char");ch = in.nextChar();System.out.println("You entered "+ch); Τελος παντω ολο τετοια μικρο χαζα προβληματακια εβρισκα και μου ετρωγαν απιστευτο χρονο να ψαχνω μεσα στο ιντερνετ,ευτυχως μοιαζει αρκετα με την C,και εφτασα στις κλασεις που μπορω να πω οτι εκει δυσκολευομαι αρκετα να καταλαβω αυτην την φιλοσοφια,παραθετω εναν κωδικα που βρηκα για να σας πω τις αποριες μου public class MyClass{ static double p1 = 3.14; static int count = 0; double radious; double x; double y; MyClass(double r1,double x1,double y1){ radious = r1; x = x1; y = y1; ++count; } double area() { return p1 * radious * radious; } 1)δεν μπορω να καταλαβω καλα τι κανει ο κατασκευαστης ακριβως και γιατι εκχωρει στα ορισματα τους τις μεταβλητες επησις γιατι δεν μπορεις να δωσεις ενα ονομα στον κατασκευαστη?απ οτι διαβασα αν θελεις να φτιαξεις εναν αλλο κατασκευαστη θα εχει και αυτος το ονομα της κλασης απλα δεν πρεπει λεει να εχει τα ιδια ορισματα,ισχυει αυτο?δεν σε περιοριζει λιγο?και ποσους κατασκευαστες μπορεις να εχεις?σε ποιες ακριβως περιπτωσεις χρειαζεται να κανεις εναν καινουργιο? 2)απ οτι διαβασα μπορεις να εχεις πολλες κλασεις,σε ποια περιπτωση χρειαζεσαι μια δευτερη κλαση? 2)Το public static void main(String[] args) ειναι και καλα το main της java?δηλαδη μετα την κλαση οταν τελειωσει πηγαινω στο public static void main(String[] args) κα εκει φτιαχνω τα αντικειμενα και τρεχω τον κωδικα?Μηπως καποιος θα μπορουσε να μας γραψει την συνεχεια αυτου του κωδικα?δηλαδη να μας εμφανισει τα αποτελεσματα στην οθονη?θα βοηθουσε πολυ,εκανα αρκετες αποπειρες αλλα δεν τα καταφερα Αυτα τα ολιγα φιλοι μου,συγνωμη αν κουρασα απλα κουραστηκα να ψαχνω στο ιντερνετ και ειδικα στα αγγλικα,εφαγα τα ματια μου εδω πανω,οποιος εχει ορεξη ας απαντησει,θα το εκτιμουσα,καλο βραδυ σε ολους
Moderators Kercyn Δημοσ. 28 Φεβρουαρίου 2014 Moderators Δημοσ. 28 Φεβρουαρίου 2014 δεν μπορω να καταλαβω καλα τι κανει ο κατασκευαστης ακριβως και γιατι εκχωρει στα ορισματα τους τις μεταβλητες Η δουλειά του κατασκευαστή είναι να αρχικοποιεί τις μεταβλητές της κλάσης σου. Φαντάσου να μην υπήρχε αυτή η λειτουργία κι εσύ να έφτιαχνες ένα αντικείμενο και στο καπάκι να καλούσες την area(). Τι ακριβώς θα σου επέστρεφε, εφ' όσον το radius δεν έχει πάρει τιμή. Υπάρχει βέβαια κι ένας default constructor (και τρέχει αν εσύ δεν γράψεις δικό σου constructor) ο οποίος μοιράζει 0 και nulls στις μεταβλητές σου γι' αυτόν ακριβώς το λόγο. επησις γιατι δεν μπορεις να δωσεις ενα ονομα στον κατασκευαστη? Γιατί κάτι τέτοιο δεν έχει νόημα. Ο κατασκευαστής δεν είναι μέθοδος την οποία μπορείς εσύ να καλέσεις (όπως, πχ, την area()) αλλά καλείται αυτόματα κάθε φορά που φτιάχνεις ένα αντικείμενο της κλάσης. απ οτι διαβασα αν θελεις να φτιαξεις εναν αλλο κατασκευαστη θα εχει και αυτος το ονομα της κλασης απλα δεν πρεπει λεει να εχει τα ιδια ορισματα,ισχυει αυτο?δεν σε περιοριζει λιγο?και ποσους κατασκευαστες μπορεις να εχεις? Ναι, μπορείς να φτιάξεις όσους κατασκευαστές θες με διαφορετικά ορίσματα. σε ποιες ακριβως περιπτωσεις χρειαζεται να κανεις εναν καινουργιο? Ας πούμε ότι εσύ στο πρόγραμμά σου φτιάχνεις αντικείμενα τύπου MyClass και ας πούμε ότι θες, αν ο χρήστης δεν εισάγει τα r, x, y, αυτά να παίρνουν κάποιες αρχικές τιμές. Οπότε θα έχεις 2 constructors: public class MyClass{ static double p1 = 3.14; static int count = 0; double radious; double x; double y; MyClass(double r1,double x1,double y1){ radious = r1; x = x1; y = y1; ++count; } MyClass() { radius = 5; x = 2; y = 3; count++; } double area() { return p1 * radious * radious; } Αν, λοιπόν, ο χρήστης δεν εισάγει αρχικές τιμές για τις μεταβλητές σου, αυτές θα πάρουν τις τιμές 5, 2 και 3 όπως ορίζω στον constructor. Φυσικά αυτό είναι ένα υπεραπλουστευμένο και ίσως ανούσιο παράδειγμα, αλλά η λογική είναι αυτή. απ οτι διαβασα μπορεις να εχεις πολλες κλασεις,σε ποια περιπτωση χρειαζεσαι μια δευτερη κλαση? Ναι, το συνηθισμένο είναι να έχεις πολλές κλάσεις σε ένα πρόγραμμα. Φαντάσου ότι θες να φτιάξεις ένα πρόγραμμα διαχείρισης του στόλου οχημάτων μιας εταιρείας. Το "όχημα" είναι μια γενική κλάση. Όχημα μπορεί να είναι ένα ΙΧ, ένα φορτηγό, ένα φορτηγό-ψυγείο, μια μηχανή, ένα λεωφορείο κλπ. Το ΙΧ δεν έχει τις ίδιες ιδιότητες (χαρακτηριστικά) με μια μηχανή ή με ένα λεωφορείο. Γι' αυτό θα χρειαστείς μια διαφορετική κλάση για κάθε τύπο οχήματος, ανάλογα με τα χαρακτηριστικά του (πχ το ΙΧ δεν έχει φορτίο και η μηχανή δεν έχει αριθμό επιβατών). Φυσικά, υπάρχουν κοινές ιδιότητες όλων των οχημάτων, αλλά εκεί πάμε στην κληρονομικότητα. Το public static void main(String[] args) ειναι και καλα το main της java?δηλαδη μετα την κλαση οταν τελειωσει πηγαινω στο public static void main(String[] args) κα εκει φτιαχνω τα αντικειμενα και τρεχω τον κωδικα? Ναι, το public static void main(String[] args) είναι η main του προγράμματός σου (αν αυτή η main βρίσκεται στην κλάση που έχει το ίδιο όνομα όπως το αρχείο σου, δηλαδή στη MyClass αν το αρχείο σου λέγεται MyClass.java). Σκέψου το σαν τη main της C κατά κάποιο τρόπο, η οποία τρέχει μόλις ξεκινάει το πρόγραμμά σου. 1
bazinga13 Δημοσ. 28 Φεβρουαρίου 2014 Μέλος Δημοσ. 28 Φεβρουαρίου 2014 φιλε μου δεν ξερω πως να σ ευχαριστησω για τον κοπο σου,να σαι καλα,με βοηθησες παρα πολυ,αυτα που μου εγραψες για να τα καταλαβω στ αγγλικα θα δυσκολευομουν πολυ,με ξεμπλοκαρες
ZAKKWYLDE Δημοσ. 28 Φεβρουαρίου 2014 Δημοσ. 28 Φεβρουαρίου 2014 Μιας και ο Kercyn έδωσε μια πολύ όμορφη απάντηση εγώ θα σε βοηθήσω στα άλλα τα επιμέρους. Ο Scanner ναι είναι απο τους πιο συνήθεις τρόπους να διαβάζεις απο την command line αλλά και απο άλλα input streams (files, http requests κτλ). Όπως και η κλάση BufferedReader. Ναι δεν είναι τόσο straightforward όπως η scanf της C (η οποία ούτως η άλλως δεν πολυχρησιμοποιείται παρά για συγκεκριμένους εκπαιδευτικούς λόγους) αλλά είναι πολύ πιο ευέλικτες όταν τις μάθεις. Είπες ότι δυσκολεύτηκες εδω: char ch; System.out.println("Enter a char"); ch = in.nextChar(); System.out.println("You entered "+ch); η Scanner δεν έχει nextChar(); μέθοδο. Για να διαβάσεις χαρακτήρα θα κάνεις in.next().charAt(0); Αυτό είναι chained method call. Η next(); επιστρέφει String και πάνω στο String καλώ την charAt(0);
bazinga13 Δημοσ. 28 Φεβρουαρίου 2014 Μέλος Δημοσ. 28 Φεβρουαρίου 2014 σ ευχαριστω θερμα κι εσενα φιλε ZAKKWYLDE,πολυ διαφωτιστικο αυτο,να σαι καλα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα