sussolini ha scritto:
Ciao a tutti, nel modificare la dimensione di un array, mi sono accorto che Java lo "resetta"
Gli array in Java NON sono "ridimensionabili". Per espandere, bisogna creare un nuovo array (di dimensione più ampia) e facendo
new Tipo[n] gli elementi del nuovo array sono tutti al loro valore di "default" (0, 0.0, false, null a seconda del tipo). Java garantisce che non vedi mai dati "spazzatura" negli array (come invece purtroppo avviene in C/C++).
sussolini ha scritto:
quindi sto provando un altro metodo, ovvero quello di salvare momentaneamente tutto in un array provvisorio e, dopo il cambio di dimensione, riportare tutto nell'array principale; il tutto avviene solo se la nuova dimensione è maggiore di quella precedente
Ho utilizzato System.arraycopy, ma avrei potuto utilizzare anche un ciclo for, il problema è che nessuno dei due funziona...intendo dire che l'array viene resettato...qualcuno saprebbe dirmi dove ho sbagliato? (Se richiesto, invierò le altre classi)
Non hai mostrato come è fatta la classe Lista. La questione sta tutta lì dentro. Ma c'è anche un aspetto di design che devi comprendere. Se hai una tua classe apposita che gestisce una "lista" (di qualunque cosa, non importa), la logica della espansione va inserita e incapsulata lì dentro. Tu dall'esterno NON devi fare cose con System.arraycopy puntando "dentro" l'oggetto con l.temp, l.lista ecc.. Questa logica va "nascosta" dentro la classe Lista.
E per chiarire in modo più completo, sappi che ci sono tipicamente 2 tecniche per espandere logicamente un array.
1) ad ogni singolo inserimento di un elemento si crea un nuovo array di lunghezza +1 e si aggiunge al fondo il nuovo elemento. E' facile da fare ma lo svantaggio è che si istanzia un nuovo array ad ogni inserimento.
2) si gestisce l'array a capacità molto più espansa, in pratica come fanno le collection ArrayList e Vector. Oltre all'array si mantiene anche il numero "logico" di elementi. Si crea un nuovo array solo quando la capacità fisica non è più sufficiente e il nuovo array non si allunga solo di +1 ma molto di più (tipicamente il doppio o giù di lì ..). E' più difficile da gestire ma il vantaggio è che il "costo" della espansione viene "ammortizzato" nel tempo.
Scegli quale tecnica usare.