Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα σας . Πως θα μπορούσα να πραγματοποιήσω το ακόλουθο :

Έχω δύο πίνακες α) String new_messages[] β)String old_messages[]

Και στους δύο πίνακες αποθηκεύονται λέξεις .

Θέλω να ελέγχω αν κάθε νέα λέξη από τον πίνακα (new_messages[]) υπάρχει ήδη στον πίνακα (old_messages[]) ..

Δημοσ.

Χρησιμοποιεις την split() για να "κοψεις" το new_messages σε λεξεις και μετα μεσα σ ενα loop εξεταζεις αν οι λεξεις που επεστρεψε η split() υπαρχουν στο old_messages, αυτο θε γινε με την indexOf()

Δημοσ.
Χρησιμοποιεις την 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.

Δημοσ.

Βασικά αν κατάλαβα καλά, αυτό που θέλει ο panagiotisk είναι να συγκρίνει το String που περιέχεται σε ένα κελί του πίνακα Α αν υπάρχει στον πίνακα Β. Αν χρησιμοποιήσεις τη split θα πάρεις λάθος αποτελέσματα (αν βρεις κάποιο αποτέλεσμα δηλαδή). Γενικά τη split δε την χρειαζόμαστε καθόλου στο συγκεκριμένο πρόβλημα, εκτός βεβαίως και δεν έχω καταλάβει το πρόβλημα και λέω χαζομάρες....

Δημοσ.

//Βήμα 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

Δημοσ.

//Βήμα 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

Δημοσ.

Μπορείς να μας δώσεις περισσότερες λεπτομέρειες, πχ για τον πίνακα old_messages; Ίσως δεν έχει αρχικοποιηθεί σωστά, στείλε όμως τον κώδικα για να είμαστε πιο σίγουροι.

Δημοσ.

String[] new_messages = new String[50]; //Πίνακας αποθήκευσης νέων tweets

String [] old_messages = new String[50]; //Παλαιες εγγραφές από την ΒΒ msgs

 

Στον πίνακα new_messages τα δεδομένα αποθηκευονται από το twitter

Στον πίνακα old_messages τα δεδομένα αποθηκεύονται από βάση mysql

Σε αυτό τον τομεα δεν έχω κάποιο πρόβλημα ..

 

Απλά θέλω να βλέπω αν κάθε στοιχείο του πίνακα new_messages υπάρχει ήδη στον πίνακα old_messages

Δημοσ.

Δες αυτό

 

>

   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

Δημοσ.

Όπως σου έδειξα από πάνω.

Η μία loop διατρέχει τον πίνακα newMessages και για κάθε κελί του ελέγχει τον πίνακα oldMessages για match.

Τι σε μπερδεύει ακριβώς?

Δημοσ.

Ψηλέ, γιατί θες να χρησιμοποιήσεις πίνακες; Άσκηση είναι;

Με δύο loop γίνεται όπως έδειξε ο GNKSB πιο πάνω. Βέβαια, όπως σωστά αναφέρθηκε πριν, σε μεγάλους πίνακες θα είσαι πολύ αργός.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...