bagomu18 Δημοσ. 25 Απριλίου 2008 Δημοσ. 25 Απριλίου 2008 Καλησπέρα παιδια. Βοήθεια αν δε βαριέστε. Σε μια κλάση εχω καποιες private μεταβλητες που τις "ενημερώνω" απο μια αλλη κλαση μεσω ενος αντικειμένου. Στην ιδια κλαση αυτη πρεπει να υλοποιήσω μια private μεταβλητή χ(array) - που ειναι πινακας που αποθηκευει τα δεδομενα απο την αλλη κλαση σαν αντεικείμενα. Με ArrayList η με Vector να το κανω? Αλλα δεν μου ειναι ευκολο.help..
elis88 Δημοσ. 26 Απριλίου 2008 Δημοσ. 26 Απριλίου 2008 Ποιο ακριβώς πρόβλημα αντιμετοπίζεις; Αν χρησιμοποιήσεις ArrayList και υποθέσουμε ότι η άλλη τάξη από την οποία θα φτιάξεις τα αντικείμενα για να τα βάλεις στο ArrayList λέγεται Example τότε θα έπρεπε να το κάνει κάπως ετσι: > import java.util.ArrayList; private ArrayList<Example> list = new ArrayList<Example>(); //Αν θες να προσθέτει τα αντικείμενα μέσο μίας μεθόδου public void fillArray(Example x) { list.add(x); } επίσης ρίξε μια ματια στο API, ια αν δεις τις μεθόδους του κάθε collection κλπ για να δείς ποιο collection σου τεριάζει καλλύτερα.
bagomu18 Δημοσ. 26 Απριλίου 2008 Μέλος Δημοσ. 26 Απριλίου 2008 Ευχαριστώ!Απ'οτι κατάλαβα αντέγραψα τις private μεταβλητές(τις τιμές) που είχα στην άλλη κλάση εδώ στο ArrayList...(?). Επειδή πρέπει να τις εμφανίσω και ολας..Πως το υλοποιώ?Η πως μπορώ να κάνω αναζήτηση στον πίνακα για συγκεκριμένες τιμές? Thanks.
elis88 Δημοσ. 26 Απριλίου 2008 Δημοσ. 26 Απριλίου 2008 Ευχαριστώ!Απ'οτι κατάλαβα αντέγραψα τις private μεταβλητές(τις τιμές) που είχα στην άλλη κλάση εδώ στο ArrayList...(?). Επειδή πρέπει να τις εμφανίσω και ολας..Πως το υλοποιώ?Η πως μπορώ να κάνω αναζήτηση στον πίνακα για συγκεκριμένες τιμές?Thanks. Πρώτα απ' ολα δεν αντέγραψες τις μεταβλητές, δημιουργησες απλά ένα αντικείμενο της τάξης που είχες φτιάξει.Δηλαδή, η τάξη που είχες φτιάξει λειτουργεί π.χ σαν μια συνταγή για να φτιάξεις κάποιο φαγητό. Για να το φτιάξεις όμως πρέπει να δημιουργλησεις αντικείμενο της τάξης αυτής. Βασικά αν έκανες copy/paste κάποια κομάτια από τον κώδικα σου θα ήταν ποιο ευκολο να σου εξηγήσω για αν σου δώσω καλλύτερα παραδείγματα. Για να κάνεις αναζήτηση χρησιμοποιείς μα δομή επανάληψης. π.χ. αν είχαμε μια ArrayList η οποία είχε μέσα αντικείμενα από String και θέλαμε να βρεί και να τυπώσει ένα συγεκριμένο String τότε θα φτιάχναμε μια μέθοδο για να κάνει την δουλειά, κάπως έτσι: > public void find(String x) { for(int i=0;i<list.size();i++) { if(list.get(i).equals(x)) { System.out.println("Mpla Mpla"); } } Με το for(int i=0;i<list.size();i++) εδώ φτιάχνει μία τοπική μεταβλητή η οποία είναι η i, όσο αυτή είναι μικρότερη από το size του ArrayList δηλαδή, από το ποσό των αντικειμένων που έχεισ βάλει μέσα εκτελούνται οι εντολές που βρίσκονται μέσα στο for, και καθέ φορά που εκτελείται προσθέτει +1 στο i ώστε να εκτελείται όσο είναι μικρότερο του size(). Ισως να έπρεπε να ρίξεις καμιά ματιά σε βιβλίο java. Αν θες έχω μερικα αγγλικά βιβλία να σου δώσω
bagomu18 Δημοσ. 26 Απριλίου 2008 Μέλος Δημοσ. 26 Απριλίου 2008 thanks, εχω βιβλιο java αλλα δεν αναφέρει πουθενά για ArrayList. και κατι τελευταιο... Τις μεταβλητες αυτες πρέπει να τις αλλαζω συνεχεια και ετσι οπως αναφερεις παραπάνω ουσιαστικά σβήνεται καθε φορά η τελευταια θέση του ArrayList κ περνει τη θέση της το ιδιο αντεικείμενο με καινουριες τιμεσ.Πως θα γίνει να αποθηκευονται όλες οι τιμες που πλξκτρολογώ απο τη στιγμη που τρεχω το προγραμμα? οι μεταβλητες ειναι int, String και enum.
elis88 Δημοσ. 26 Απριλίου 2008 Δημοσ. 26 Απριλίου 2008 thanks, εχω βιβλιο java αλλα δεν αναφέρει πουθενά για ArrayList. και κατι τελευταιο...Τις μεταβλητες αυτες πρέπει να τις αλλαζω συνεχεια και ετσι οπως αναφερεις παραπάνω ουσιαστικά σβήνεται καθε φορά η τελευταια θέση του ArrayList κ περνει τη θέση της το ιδιο αντεικείμενο με καινουριες τιμεσ.Πως θα γίνει να αποθηκευονται όλες οι τιμες που πλξκτρολογώ απο τη στιγμη που τρεχω το προγραμμα? οι μεταβλητες ειναι int, String και enum. Ποιο πάνω σου έδειξα έναν τρόπο να κάνεις αναζήτηση. Το ArrayList είναι δυναμικό. Δηλαδή μπορείς να βάλεις μέσα όσα αντικέίμενα θέλεις χωρίς περιορισμούς. Τώρα εσύ θες να βάλεις ενα αντικείμενο μίας τάξης που έχει τα πεδια (μεταβλητές) που μου είπες ποιο πάνω η θες να βάλεις αυτα τα ίδια τα πεδία στο ArrayList? θες να βάλεις αυτά τότε θα πρέπει να δηλώσεις το ArrayList έτσι: ArrayList<Object> ώστε να πέρνει διαφορετικά είδους αντικείμενα μέσα του.
bagomu18 Δημοσ. 26 Απριλίου 2008 Μέλος Δημοσ. 26 Απριλίου 2008 Εγω απλα μπερδευομαι με το ArrayList. Για να καταλαβεις: { ClassName myObject = new ClassName(); ArrayList<ClassName> list = new ArrayList<ClassName>(); list.add( myObject ); System.out.println(((ClassName)list.get(0)).getX()); System.out.println(((ClassName)list.get(0)).getY()); System.out.println(((ClassName)list.get(0)).getZ() ); } Ουσιαστικα πριν αρχισει αυτο το κομματι κωδικα που σου εγραψα δινω τιμες στις private στην αλλη κλαση. αυτες οι τιμες θέλω να αποθηκευονται σε μια μεταβλητή private σε αυτην εδώ την κλάση σε πίνακα υπο την μορφή αντεικειμένου. (τουλαχιστόν έτσι μου ζητειται) Το κακό ειναι οτι στις μεταβλητες στην αλλη κλάση δεν δινω μονο μια τιμη αλλα πολλές. Καθώς ειναι λιστα απο απο καποια πραγματα με καποια χαρακτηριστικα. Και θελω να αποθηκευονται ολα τα χαρακτηριστικα ολες τισ φόρες και σε διαφορερική θέση για να κάνω ελεγχο η αναζήτηση. Οταν ομως βαζω 2 φορές τιμές στις private σβηνονται οι προηγόυμενες στην ArrayList και περνουν θέση οι καινούριες.Αυτο το καταλαβαίνω απο τα println που φαινονται στον κώδικα. ευχαριστώ που ασχολεισαι παντως!!!
alex2005 Δημοσ. 26 Απριλίου 2008 Δημοσ. 26 Απριλίου 2008 Λοιπόν ψιλομπερδεύτηκα με αυτό που είπες. Αν κατάλαβα καλά αποθηκεύεις κάποια πράγματα σε ένα αντικείμενο...και μετά αυτό το αντικείμενο το βάζεις στην ArrayList. Αν κατάλαβα καλά εσύ μετά τραβάς αυτό το αντικείμενο από την λίστα και ξαναβάζεις άλλες τιμές???Και μετά αυτό που θέλεις είναι να αποθηκεύονται σε άλλο αντικείμενο?? Αν θέλεις κάτι παρεμφερές να σου πω ότι η Java δουλεύει με references πράγμα που σημαίνει ότι όταν "στείλεις" ένα αντικείμενο κάπου....πχ σαν παράμετρο aMethod((ClassName)list.get(0)); και η μέθοδος σου είναι public void aMethod(ClassName obj) { obj.setX(1); } Τότε το setX θα αλλάξει τα δεδομένα του αντικειμένου που είναι μέσα στην λίστα.Αυτό γίνεται γιατί όταν στέλνεις ένα αντικείμενο στέλνεις ένα reference στην μνήμη (pointer αν είσαι πρώην C programmer) οπότε οποιαδήποτε αλλαγή γίνει γίνεται και στο αρχικό αντικείμενο. Ελπίζω αυτό να είναι αυτό που ρώταγες....και να μην είμαι εκτός τόπου και χρόνου
elis88 Δημοσ. 26 Απριλίου 2008 Δημοσ. 26 Απριλίου 2008 Δεν είμαι σίγουρος αν κατάβα αυτό που θες να κάνεις, αλλά αν το κατάλαβα μπορείς να το κάνεις με ενα δυσδιάστατο πίνακα ([][]) αλλά επίδει αυτοί οι πίνακες δεν είναι δυναμικοί μπορείς να τα βάζεις μέσα σε ArayList τα αντικείμενα σου και μετα να το μετατρέψεις. Θα σου δείξω έναν τρόπο για να το κάνεις αυτό: Μετράς τα πεδία της άλλης τάξης και δηλώνεις έναν πίνακα έτσι: > //opoy list, to ArrayList me ta antikeimena //ekei pou leei 5, einai o arithmos twn xaraktiristikwn tis allis taksi Object[][] array = new Object[list.size()][5]; Ύστερα χρησιμοποιόντας μια δομη επανάληψης: Όπου Example η άλλη τάξη σου > Example examp; for(int i=0;i<list.size();i++) { examp=list.get(i); for(int y=0;y<5;y++) { if(y==0) { array[i][y]=examp.getXaraktiristiko1(); } else if(y==1) { array[i][y]=examp.getXaraktiristiko2(); } else if(y==2) { array[i][y]=examp.getXaraktiristiko3(); } Kai paei llegontas....
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.