Che strutture dati puoi utilizzare? Puoi usare Vector o devi per forza solo e sempre usare array?
Che strutture dati puoi utilizzare? Puoi usare Vector o devi per forza solo e sempre usare array?
<´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
"The answer to your question is: welcome to tomorrow"
Purtroppo solo array, non abbiamo studiato altro per ora.
Flash Developer for Rich Media
PHP, jQuery Developer
Allora aggiungi qualcosa del genere:
Ossia hai bisogno di nuovi array dove andare ad appoggiare le string e le frequenzecodice:String[] dest = new String[dictionary.length]; int[] clean_freq = new int[dictionary.length]; int index = 0; for (int i = 0; i < dictionary.length; i++) { if (freq[i] == 1) { dest[index] = dictionary[i]; clean_freq[index] = 1; index++; } else { boolean presente = false; for (int j = 0; j < i; j++) { if (dictionary[j].equals(dictionary[i])) { presente = true; break; } } if (!presente) { dest[index] = dictionary[i]; clean_freq[index] = freq[i]; index++; } } } System.out.println("\n\n\nRipulito\n"); for (int i = 0; dest[i] != null && i < dest.length; i++) { System.out.println(dest[i]+" -> "+clean_freq[i]); }
<´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
"The answer to your question is: welcome to tomorrow"
Volendo usare solo ed esclusivamente array, io farei:
Semplice e pulito.codice:String str = "sopra la panca la capra canta sotto la panca la capra crepa"; String[] words = str.split ("\\s+"); String[] dictionary = new String[words.length]; int[] frequency = new int[words.length]; int count = 0; mainloop: for (int i = 0; i < words.length; i++) { for (int j = 0; j < count; j++) { if (words[i].equals (dictionary[j])) { frequency[j]++; continue mainloop; } } dictionary[count] = words[i]; frequency[count++] = 1; } for (int i = 0; i < count; i++) System.out.println ("Parola \"" + dictionary[i] + "\" frequenza " + frequency[i]);
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
Grazie mille a tutti e due.
Andbin cosa sono quel "mainloop" e "continue mainloop;"?
e potresti spiegarmi un po' il tuo codice? ^^;;;
Cmq mi sto accorgendo che il prof ha mancato di spiegarci un po' di cose prima di darci questo esercizio <pensa>
Flash Developer for Rich Media
PHP, jQuery Developer
Sono le "label" (etichette). In Java le istruzioni break e continue possono avere una etichetta. Non sto adesso a spiegarti le varie regole (dovrebbe o avrebbe dovuto farlo il tuo prof ....Originariamente inviato da Miroku
Andbin cosa sono quel "mainloop" e "continue mainloop;"?) comunque per dirla semplice, quando viene raggiunto quel continue mainloop; si passa subito alla successiva iterazione del for esterno marcato appunto con la label e senza eseguire il resto del corpo nel for.
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
Ehm no, non ha ancora spiegato le etichette =P
Cmq... fammi un attimo capire il tuo codice (che funziona alla perfezione, grazie mille):
Va beh, fa un'array con le varie parole, dichiari quelli che servono per conservare le parole e la frequenza... poi controlli se è presente un elemento di words in dictionary e se è così incrementi la frequenza con l'indice uguale a quella parola.
Quello che non capisco è quello all'esterno del secondo for ma dentro al primo...
codice:[...] dictionary[count] = words[i]; frequency[count++] = 1; [...]
Flash Developer for Rich Media
PHP, jQuery Developer
Se la parola l'ho già trovata nel dictionary, devo solo incrementare la frequenza. Se la parola non c'è nel dictionary, lo saprò solo quando il ciclo interno è terminato.Originariamente inviato da Miroku
Quello che non capisco è quello all'esterno del secondo for ma dentro al primo...
codice:[...] dictionary[count] = words[i]; frequency[count++] = 1; [...]
Quel 'continue' è strategico proprio in quel senso. Se la trovo, incremento la frequenza e con il continue mainloop passo alla parola successiva senza fare le due istruzioni che hai riportato sopra.
Se non la trovo, beh, il ciclo interno termina, so quindi che la parola non c'è e la aggiungo nel dictionary mettendo anche frequenza iniziale 1.
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
e come mai l'indice della frequenza è incrementato?
Flash Developer for Rich Media
PHP, jQuery Developer
È un post-incremento! "count" l'ho usato per tenere il numero "logico" di elementi in dictionary/frequency.Originariamente inviato da Miroku
e come mai l'indice della frequenza è incrementato?
Se count è 2, allora inserisco i valori all'indice 2 (il terzo elemento) e poi incremento per ottenere 3 (appunto 3 elementi).
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet