panagiotisk Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Καλημέρα σας . Πως θα μπορούσα να πραγματοποιήσω το ακόλουθο : Έχω δύο πίνακες α) String new_messages[] β)String old_messages[] Και στους δύο πίνακες αποθηκεύονται λέξεις . Θέλω να ελέγχω αν κάθε νέα λέξη από τον πίνακα (new_messages[]) υπάρχει ήδη στον πίνακα (old_messages[]) ..
nilosgr Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Χρησιμοποιεις την split() για να "κοψεις" το new_messages σε λεξεις και μετα μεσα σ ενα loop εξεταζεις αν οι λεξεις που επεστρεψε η split() υπαρχουν στο old_messages, αυτο θε γινε με την indexOf()
nexuss Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Χρησιμοποιεις την split() για να "κοψεις" το new_messages σε λεξεις και μετα μεσα σ ενα loop εξεταζεις αν οι λεξεις που επεστρεψε η split() υπαρχουν στο old_messages, αυτο θε γινε με την indexOf() Η split δεν παίρνει σαν όρισμα πίνακα, αλλά παράγει έναν πίνακα από Strings. Για αυτό που θέλει ο panagiotisk η split είναι λίγο άκυρη... Όπως είπε και ο djcat, ξεκίνα με δυο for και κάνε αναζητήσεις αν οι πίνακές σου είναι μικροί. Αν οι πίνακές σου είναι μεγάλοι, αυτός ο αλγόριθμος δεν είναι αποδοτικός και θα σου παίρνει ώρα (και πόρους). Εκεί θα πρέπει να χρησιμοποιήσεις την binarySearch από την κλάση Arrays. O ψευδοκώδικας για να το κάνεις είναι ο εξής: κάνε sort στον πίνακα Α (πρέπει να το κάνεις γιατί αλλιώς η binarySearch θα σου φέρνει "αλλόκοτα" αποτελέσματα) μπες σε κάθε στοιχείο i του πίνακα Β με μια for δες το αποτέλεσμα της int k = binarySearch(B) αν είναι αρνητικό δεν υπάρχει στον πίνακα B αν είναι θετικό υπάρχει και στους δυο πίνακες και το βρίσκεις ως A[k] Μπες στη διαδικασία της binarySearch μόνο αν σε ενδιαφέρει η απόδοση. Αν όμως σε ενδιαφέρει να γράψεις τον πιο εύκολο κώδικα που μπορείς, μείνε στα 2 for loop.
nilosgr Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 @nexuss θα βαλει ενα loop πχ >words[i] = new_messages[i].split(" ");
nexuss Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Βασικά αν κατάλαβα καλά, αυτό που θέλει ο panagiotisk είναι να συγκρίνει το String που περιέχεται σε ένα κελί του πίνακα Α αν υπάρχει στον πίνακα Β. Αν χρησιμοποιήσεις τη split θα πάρεις λάθος αποτελέσματα (αν βρεις κάποιο αποτέλεσμα δηλαδή). Γενικά τη split δε την χρειαζόμαστε καθόλου στο συγκεκριμένο πρόβλημα, εκτός βεβαίως και δεν έχω καταλάβει το πρόβλημα και λέω χαζομάρες....
panagiotisk Δημοσ. 2 Δεκεμβρίου 2011 Μέλος Δημοσ. 2 Δεκεμβρίου 2011 //Βήμα 5 - Έλεγχος αν κάθε νέο tweet απο τον πίνακα new_messages // υπάρχει ήδη στον πίνακα old_messages //To counter_new ειναι ο αριθμός των tweets που βρέθηκαν for (int a=0; a<counter_new; a++) { //Για κάθε νέο tweet found_r = Arrays.binarySearch(old_messages,new_messages[a]); if (found_r<0) { println ("To neo tweet "+new_messages[a]+" den vrtehike ston pinaka old_messages"); } else { println ("To neo tweet "+new_messages[a]+" vrtehike ston pinaka old_messages"); } } Μου κοκκινίζει την γραμμή found_r = Arrays.binarySearch(old_messages,new_messages[a]); και εμφανίζει το error : NullPointerException
panagiotisk Δημοσ. 2 Δεκεμβρίου 2011 Μέλος Δημοσ. 2 Δεκεμβρίου 2011 //Βήμα 5 - Έλεγχος αν κάθε νέο tweet απο τον πίνακα new_messages // υπάρχει ήδη στον πίνακα old_messages //To counter_new ειναι ο αριθμός των tweets που βρέθηκαν for (int a=0; a<counter_new; a++) { //Για κάθε νέο tweet found_r = Arrays.binarySearch(old_messages,new_messages[a]); if (found_r<0) { println ("To neo tweet "+new_messages[a]+" den vrtehike ston pinaka old_messages"); } else { println ("To neo tweet "+new_messages[a]+" vrtehike ston pinaka old_messages"); } } Μου κοκκινίζει την γραμμή found_r = Arrays.binarySearch(old_messages,new_messages[a]); και εμφανίζει το error : NullPointerException
nexuss Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Μπορείς να μας δώσεις περισσότερες λεπτομέρειες, πχ για τον πίνακα old_messages; Ίσως δεν έχει αρχικοποιηθεί σωστά, στείλε όμως τον κώδικα για να είμαστε πιο σίγουροι.
panagiotisk Δημοσ. 2 Δεκεμβρίου 2011 Μέλος Δημοσ. 2 Δεκεμβρίου 2011 String[] new_messages = new String[50]; //Πίνακας αποθήκευσης νέων tweets String [] old_messages = new String[50]; //Παλαιες εγγραφές από την ΒΒ msgs Στον πίνακα new_messages τα δεδομένα αποθηκευονται από το twitter Στον πίνακα old_messages τα δεδομένα αποθηκεύονται από βάση mysql Σε αυτό τον τομεα δεν έχω κάποιο πρόβλημα .. Απλά θέλω να βλέπω αν κάθε στοιχείο του πίνακα new_messages υπάρχει ήδη στον πίνακα old_messages
GKNSB Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Δες αυτό > String[] newMessages = {"ena","lala","dyo"}; String[] oldMessages = {"la","lala","lalala","lalalala"}; for (int i=0; i<newMessages.length; i++) { for (int j=0; j<oldMessages.length; j++) { if (newMessages[i].equals(oldMessages[j])) { System.out.println("Match found, slot "+ (i+1) +" of newMessages, with slot "+ (j+1) +" of oldMessages value " + newMessages[i] ); } } } output : >Match found, slot 2 of newMessages, with slot 2 of oldMessages value lala
panagiotisk Δημοσ. 2 Δεκεμβρίου 2011 Μέλος Δημοσ. 2 Δεκεμβρίου 2011 Με τα δύο loop πως μπορεί να γίνει ??
GKNSB Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Όπως σου έδειξα από πάνω. Η μία loop διατρέχει τον πίνακα newMessages και για κάθε κελί του ελέγχει τον πίνακα oldMessages για match. Τι σε μπερδεύει ακριβώς?
djcat Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Ψηλέ, γιατί θες να χρησιμοποιήσεις πίνακες; Άσκηση είναι; Με δύο loop γίνεται όπως έδειξε ο GNKSB πιο πάνω. Βέβαια, όπως σωστά αναφέρθηκε πριν, σε μεγάλους πίνακες θα είσαι πολύ αργός.
bokarinho Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 > String data[] = {"test", "test1", "test2"}; int index = Arrays.binarySearch(data, "test1");
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα