γεια σας , μηπως μπορει καποιος να μου πει εναν ασφαλη τροπο για να κραταει τη τιμη της μια τοπικη μεταβλητη που ειναι ορισμα στη μεθοδο και μετα το περας της μεθοδου στην εκτελεση στη Java;
η τοπικη μεταβλητη δινεται στη μεθοδο ως παραμετρος , η μεθοδος της καταχωρει καποια τιμη αλλα δεν επιστρεφει αυτη τη μεταβλητη αλλα καποια αλλη
Συγκεκριμενα ,εχω το εξης προβλημα που με ταλαιπωρει
Επιτηδες τα ονοματα ειναι ετσι .
εχω μια κλαση Α στην οποια εχω μια μεθοδο που μεσα και σε αλλα υπαρχουν αυτες οι 2 σειρες
η ιδια μεθοδος μετα χρησιμοποιει το Υ και το par2 .Κώδικας:ArrayList<String []> par2 = new ArrayList<String []>(); String[] Y = object1.methodofobject1(par1,par2); // par1 is String ,par2 is ArrayList<String []>
Με το Υ ειναι ok , αλλα στο par2 δεν εχει περασει τη τιμη που της εβαλε η μεθοδος , ειναι κενη ( [ ]) οπως την δινω ως ορισμα στη methodofobject1 , δε της εδωσε τη τιμη που της δινει μεσα η methodofobject1
Σε μια αλλη κλαση με ονομα Object1 εχω γραψει τη methodofobject1 που κανει κατι τετοιο
καμια ιδεα , νομιζω οτι φταιει αυτο που λεω αρχικα .Κώδικας:public String [] methodofobject1 (String x1 , ArrayList<String[]> x2) { for (object2 element : collectionofobjects2) { if (element.method1ofobject2().equals(x1)) { x2 = element.method2ofobject2(); // edw exei enhmerwsei to x2 epityxws , opws katalaba apo mia println pou ebala apo katw return element.method3ofobject2(); } } return null; }
υπαρχουν και αλλες κλασεις φυσικα αλλα νομιζω οτι δεν επηρεαζουν σε αυτο
Εμφάνιση 1-5 από 5
-
16-12-18, 01:58 Τοπικες μεταβλητες στη Java #1
-
16-12-18, 10:05 Απάντηση: Τοπικες μεταβλητες στη Java #2
Ειναι λίγο δύσκολο να καταλάβω έτσι, χωρίς ολοκληρωμένο παράδειγμα αλλά το πρόβλημα σε αυτές τις περιπτώσεις είναι ότι δεν καταλαβαίνεις αρκετά τις έννοιες By Reference, By Value, Mutable και Immutable.
Στην Java υπάρχει η θεώρηση ότι όλες οι μεταβλητές στις συναρτήσεις είναι by reference εκτός από τις primitive (int, float etc) που είναι by value. Αυτό πρακτικά είναι μεγάλο λάθος καθώς τα πάντα είναι by value, απλά επειδή όλα τα objects είναι pointers γίνεται by value ο pointer, άρα έχεις ένα αντίγραφο του Pointer που δείχνει όμως στα ίδια δεδομένα. Αλλάζοντας τα δεδομένα στα οποία δείχνει ο pointer, αλλάζουν και έξω από τη συνάρτηση.
Εκεί που έρχεται συνήθως το πρόβλημα είναι τα immutable objects. Αντικείμενα δηλαδή που δεν μπορούν να τροποποιηθούν αλλά μόνο να επαναδημιουργηθούν (πχ string).
Έτσι αν περάσεις ένα String σε μία συνάρτηση στην ουσία περνάς το τον pointer στη συνάρτηση by value. Δηλαδή δημιουργείτε ένας καινούργιος pointer που δείχνει στα ίδια δεδομένα που έδειχνε και ο παλιός. Αν κάνεις new όμως στον καινούργιο τότε έχεις απλά αλλάξει το αντίγραφο και όχι το παλιό, καθώς αλλάζει τελείως θέση το αντίγραφο και σταματάει να δείχνει στα ίδια που έδειχνε το παλιό.
Αντίστοιχα και οι πίνακες είναι ένας pointer. Αν περάσεις ένα "int [] x" σε μία συνάρτηση και κάνεις "x = new int[10]" τότε θα αλλάξεις το αντίγραφο του pointer και όχι τον αρχικό.
Δεν ξέρω αν κάτι τέτοιο εφαρμόζεται στην περίπτωσή σου (καθώς δεν βλέπω την method3ofobject2()) αλλά λέω μία ιδέα.
-
16-12-18, 12:46 Απάντηση: Τοπικες μεταβλητες στη Java #3
ευχαριστω , το προβλημα ειναι οτι οταν καλω τη methodofobject1 (2η σειρα στο πρωτο τμημα) , το Υ παιρνει τη τιμη που της επιστρεφει η methodofobject1 , ομως το ορισμα par2 που δινεται στη methodofobject1 το αλλαζει εσωτερικα μεσα στη μεθοδο , αλλα μετα δηλ στην επομενη γραμμη του τμηματος 1 (εδω δε γραφω κατι) οταν τελειωνει η μεθοδος και συνεχιζει δεν ειναι αλλαγμενο και αυτο προκαλει προβληματα μετα .Μηπως υπαρχει καμια ιδεα πως μπορω το διορθωσω αυτο(ισως με κανα modifier) , μια λυση θα ηταν να το εβαζα πεδιο το par2 αλλα δε μπορω να το κανω γιατι με δεσμευει ενα interface
-
16-12-18, 14:42 Απάντηση: Τοπικες μεταβλητες στη Java #4
Είναι ακριβώς αυτό που σου εξήγησα πριν. Δεν δουλεύει γιατί αναθέτεις καινούργια τιμή στην παράμετρο που είναι Pointer. Αυτό έχει σαν αποτέλεσμα να αλλάξει το αντίγραφο του Pointer που πέρασε σαν παράμετρος και όχι τον αρχικό!
- - - Updated - - -
Αυτά είναι τα βήματα τα οποία κάνεις.
Στην ουσία το x2 "δείχνει" στο ίδιο σημείο με το par2 γιατί έγινε ένα αντίγραφο του pointer. Μετά όμως αλλάζεις το ίδιο το x2 (όχι x2.variable) με αποτέλεσμα να αλλάζεις τον δείκτη να δείχνει κάπου αλλού. Το par2 όμως δεν άλλαξε. Παρέμεινε ακριβώς το ίδιο.
Αυτό που θα μπορούσες να κάνεις (πιθανολογώ) είναι
Κώδικας:x2.addAll(element.method2ofobject2());
-
16-12-18, 15:12 Απάντηση: Τοπικες μεταβλητες στη Java #5
ok , ευχαριστω !
Το διορθωσα και τωρα μου τρεχει .
Παρόμοια Θέματα
-
Σχεδόν 4 εκατομμύρια οι συνδέσεις FttH στη Γαλλία
Από lewton στο φόρουμ ΕιδήσειςΜηνύματα: 12Τελευταίο Μήνυμα: 19-09-18, 17:09 -
Απόψεις περί εκμάθησης Java
Από NetJim στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 24Τελευταίο Μήνυμα: 26-06-18, 16:54 -
Java
Από 5th yonko στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 3Τελευταίο Μήνυμα: 26-06-18, 16:44 -
Η Oracle θα σταματήσει την υποστήριξη Serialization στην Java επειδή αποτελεί την αιτία για πολλές ευπάθειες της
Από nnn στο φόρουμ ΕιδήσειςΜηνύματα: 5Τελευταίο Μήνυμα: 29-05-18, 20:14 -
Αναβιώνει η διαμάχη μεταξύ Google και Oracle για την χρήση της Java στο Android
Από nnn στο φόρουμ ΕιδήσειςΜηνύματα: 12Τελευταίο Μήνυμα: 29-03-18, 08:59
Bookmarks