Originariamente inviato da -MaVeRiK86-
Io dovrei eliminare il suo doppio dall'array lasciandone solo uno (il mio metodo li elimina tutti e due invece)
Ci sto impazzendo, cosa sbaglio?Qualcuno potrebbe aiutarmi?
Si può risolvere in diversi modi.
Un modo è ordinare l'array secondo un ordinamento tale per cui eventuali "doppioni" si posizionano in sequenza. A quel punto basta una sola scansione dell'array, dal secondo "doppione" in poi che trovi che è uguale al primo, lo elimini "virtualmente" giocando sugli indici in modo che gli episodi successivi vengano assegnati a indici inferiori.
Altro modo è usare un "set", ovvero una collezione che non ammette duplicati. Qui però la "uguaglianza" dovrebbe basarsi su equals(). E tra l'altro non sarebbe male definire l'equals() in modo da semplificarti la vita. Quando 2 episode sono "uguali"?? A rigor di logica, dovrebbe bastare quando hanno serial e titolo uguale.
Oppure ancora fare il doppio for innestato, come stavi facendo. Ma non così. Innanzitutto hai fatto partire il for interno da 0 e poi "salti" l'elemento se è allo stesso indice. Ma se ci pensi, non c'è bisogno di partire da più indietro.
Esempio con le stringhe:
codice:
public class Prova {
public static void main(String[] args) {
String[] arr = { "ciao", "pippo", "pluto", "ciao", "hello", "ciao", "pippo" };
int logicalSize = arr.length;
for (int i = 0; i < logicalSize; i++) {
String elem = arr[i];
int s = logicalSize;
for (int j = i+1, w = j; j < s; j++) {
if (elem.equals(arr[j])) {
logicalSize--;
} else {
arr[w++] = arr[j];
}
}
}
for (int i = 0; i < logicalSize; i++) {
System.out.println(arr[i]);
}
}
}
C'è una cosa che non ho fatto: annullare i reference al fondo. All'inizio la dimensione logica è 7, alla fine restano 4. Gli ultimi 3 andrebbero annullati, specialmente se, come nel tuo caso, hai oggetti complessi. Basta tenersi la dimensione iniziale e poi fare un ciclo for finale.