View Full Version : [JAVA] Array dinamici
mirkus90
15-11-2007, 14:18
Ciao raga x una esercitazione scolastica il prof ci ha raccomandato di usare degli array dinamici (vettori dinamici se preferite chiamarli così)...solo che sul maledetto libro che tengo nn sono nemmeno nominati....mi potreste illuminare sulla dichiarazioe e sull'uso di essi???
Ciao raga x una esercitazione scolastica il prof ci ha raccomandato di usare degli array dinamici (vettori dinamici se preferite chiamarli così)...solo che sul maledetto libro che tengo nn sono nemmeno nominati....mi potreste illuminare sulla dichiarazioe e sull'uso di essi???Suppongo che il tuo prof. si riferisca ad ArrayList o Vector, due classi che fanno parte del "collections framework" e che sono nel package java.util.
Es.:
ArrayList<String> arr = new ArrayList<String> ();
arr.add ("ciao");
arr.add ("prova");
Oceans11
15-11-2007, 14:47
visto che è una esercitazione scolastica posso supporre che per array dinamici intende proprio array e non strutture dati già definite nelle librerie java, quindi niente ArrayList ne Vector e simili.
In questo caso allora devi semplicemente dichiarare un array lungo, che ne so, diciamo 20...poi ogni volta che inserisci o rimuovi un elemento vedi se è il caso di ridimensionare l'array stesso!!!
questo vuol dire dichiarare un nuovo array, + piccolo se hai rimosso, + grande se stai aggiungendo, e copiarci dentro tutti i dati che avevi nell'array di partenza!
qui (http://www.dis.uniroma1.it/~degiacom/didattica/fond1info/edizione2002_03/materiale/Array-dinamici-dizionario/Dizionario2.java) c'è un esempio di array dinamici.
spero di esserti stato di aiuto....ciao
mirkus90
15-11-2007, 16:22
Praticamente stiamo facendo dei vettori di record...perciò mi servirebbe non dichiarare un vettore di una grandezza definita ma indefinita, in modo ke se mi servisse aggiungere un nuovo record, il vettore si autoaggiunga una cella da riempire.
Il prof ha detto ke si può...
Il prof ha detto ke si può...Sì che si può ma la questione è un'altra: devi implementare e gestire tu un "array dinamico" (e in tal caso segui le indicazioni di Oceans11) o devi semplicemente usare qualcosa che esiste già come appunto le classi che ho menzionato io??
mirkus90
15-11-2007, 16:53
devo usare un vettore dinamico di record....cioè ogni songola cella del vettore sarà caratterizzata da quello ke specificherò io in una classe scritta da me
devo usare un vettore dinamico di record....cioè ogni songola cella del vettore sarà caratterizzata da quello ke specificherò io in una classe scritta da meSì ma torno a ripetere: questo vettore dinamico devi implementarlo tu? Cioè devi scrivere del codice che lo crea, espande quando necessario, svuota, ecc....
O devi semplicemente usare qualcosa di già fatto? Come appunto ad esempio ArrayList non dovendo preoccuparti di come funziona internamente?
mirkus90
15-11-2007, 17:07
no devo scrivere io qnd ingrandirlo ...ridurlo...visto ke devo creare una gestione dei cd di una casa discografica...quindi mi kiede di poter eliminare un cd o un brano...quindi eliminare cele del vettore...perciò deve essere comandato ttt da me
no devo scrivere io qnd ingrandirlo ...ridurlo... se ti serve di decidere la dimensione esatta dell'array, ArrayList e Vector ti permettono di lavorare sulla capacità tramite i metodi trimToSize ed ensureCapacity.
visto ke devo creare una gestione dei cd di una casa discografica...quindi mi kiede di poter eliminare un cd o un brano...quindi eliminare cele del vettore...perciò deve essere comandato ttt da me gestire array di dimensione dinamica è noioso e complicato da fare a mano: se usi ArrayList o Vector puoi fare in poche righe tutto quello che ti serve.
se invece il prof ti ha detto specificamente di riprogrammare una classe che implementi la gestione di un array dinamico allora mi sembra un esercizio un po' idiota
Ciao,
mi unisco alla richiesta di Mirco.... stiamo nella stessa barca (ops... classe :D ) e sto prof spiega male e spesso lancia dei concetti alla rinfusa tentando di spiegarli unicamente con degli esempi (ce ne spara a raffica) ma alla fine non ci capiamo nulla...
Stavolta ci ha chiesto di ricercare gli array dinamici, vettori che, a sue parole, possono essere ridimensionati (ingranditi o rimpiccioliti, mi riferisco al numero di celle) a seconda se si aggiungono o si cancellano dati in essi contenuti.
Quindi non più il classico, ad esempio, vettore statico del tipo int vet=new int[10], bensì un vettore che dinamicamente modifichi la sua dimensione
Usate un linguaggio facile, a basso livello (NON l'Assembly, eh? :D )... di java non siamo delle cime universitarie, sappiamo giusto le basi :(
e cosa c'è che non va nell'esempio del post #2?
Il prof ha detto che è possibile creare vettori dinamici che automaticamente si "ingrandiscono" quando si inserisce un nuovo elemento che normalmente, con i vettori statici, tradizionali, darebbe errore del tipo Index out of bounds.
Il prof ha detto che è possibile creare vettori dinamici che automaticamente si "ingrandiscono" quando si inserisce un nuovo elemento che normalmente, con i vettori statici, tradizionali, darebbe errore del tipo Index out of bounds.
mi pare che non c'entri nulla con l'esempio del post #2...
mi pare che non c'entri nulla con l'esempio del post #2...
Già... :(
wingman87
15-11-2007, 19:13
Gli ArrayList non lo so ma i Vector si espandono automaticamente.
qwerty86
15-11-2007, 19:21
Ricapitolando le cose sono due :
- Usare Array dinamici di libreria , ArrayList e Vector
- Creare un array statico e ogni tot o quando l'array si riempie , andare a dichiarare un nuovo array , disolito con la dimensione doppia del precedente , e ricopiare tutti gli elementi.
Credo che a voi serve il secondo modo , anche se è inutili , ma è utile per capire il funzionamento degli Array dinamici . A suo tempo (3° anno di itis ) anche io ho dovuto realizzare una cosa del genere in C . :)
mirkus90
15-11-2007, 19:27
Io invece penso alla prima...noi siamo del 4° e purtroppo siamo un pò indietro cn il programma:mad: ...cmq qlkn ci potrebbe aiutare??? a noi servirebbe un vettore che semplicemente si auto aggiunga una cella al nostro comando e che al posto di essere di tipo INT o STRINg sia di tipo miorecord ( dove miorecord è il nome che ho dato al mio record creato in una classe separata e da implementare nel vettore)!!!!
Non sò...+ semplice di così nn sò come spiegarlo
Mi sa che Cuccinelli abbia gaffato ancora... la faccenda dell'array dinamico è più complicata del previsto :(
qwerty86
15-11-2007, 19:32
Mi sa che Cuccinelli abbia gaffato ancora... la faccenda dell'array dinamico è più complicata del previsto :(
Non è complicata se si utilizzano quelli già "pronti" , ma se li dovete realizzare voi è un algoritmo non facilissimo :)
mirkus90
15-11-2007, 19:35
lui ha parlato anche di "liste" o qualcosa del genere...forse esistono dei costrutti o qualcosa in cui possiamo gestire molti dati a nostro piacimento???
qwerty86
15-11-2007, 19:42
lui ha parlato anche di "liste" o qualcosa del genere...forse esistono dei costrutti o qualcosa in cui possiamo gestire molti dati a nostro piacimento???
Allora quello che fa al caso vostro sono gli ArrayList che sono array dinamici, potete inserire quanti elementi volete , rimuoverli e fa il resize in automatico!
qui avete la documentazione completa di ArrayList:
http://java.sun.com/javase/6/docs/api/index.html?java/util/ArrayList.html
lasciate perdere Vector: si tratta di una classe concettualmente identica ad ArrayList ma sincronizzata, e visto che avete solo poche basi di Java suppongo che non dobbiate avere nulla a che fare con la concorrenza, quindi andate tranquilli su ArrayList.
vi aggiungo un altro esempio di come usare ArrayList per memorizzare un vettore di stringhe dinamicamente espandibile.
dichiarazione:
ArrayList<String> stringArray = new ArrayList<String>();
aggiunta nuovi elementi:
stringArray.add("asd");
stringArray.add("lol");
stringArray.add("lmao");
rimozione elemento di indice noto:
stringArray.remove(1); /* questo rimuoverà la stringa "lol" visto che tra quelle aggiunte nell'esempio precedente e' quella alla posizione 1 */
rimozione elemento (algoritmo inefficiente):
stringArray.remove("asd");
iterazione su tutto l'array:
for (String string : stringArray)
{
System.out.println(string);
}
più semplice di così che altro volete?
l'unica complicazione è che non potete memorizzare array di tipi nativi, quindi dovrete wrappare i tipi nativi con le apposite classi. per esempio se voleste dichiarare un array di interi:
ArrayList<Integer> intArray;
o un array di booleani:
ArrayList<Boolean> boolArray;
mirkus90
15-11-2007, 19:55
Grazie dell'aiuto alla fine abbiamo trovato quello che fà per noi...ma scusate l'ignoranza...ma non sono riuscito a trovare sul sito indicato da 71104 (grazie tante ancora) la dichiarazione...oppure mi basta fare "arraylist( "ciao")":confused: :confused: :confused: :confused: :confused:
mirkus90
15-11-2007, 19:59
scusa del post precedente ma abbiamo postato quasi contemporaneamente...si grazie...si capisce tutto...è tutto ok grazie...sta solo nel provarlo...penso che domani pomeriggio ci metto mani...al max gli faccio dare una sbirciata al prof....e gli dico ke questa sarebbe la soluzione + facile...mi fido di voi:D ;)
mirkus90
15-11-2007, 20:19
Raga...leggendo la traccia dell'esercitazione ho riscontato un'altro problemino...mi chiede di sommare delle durate temporali...detto in parole povere devo sommare le durate delle song...per esempio 3 min 06 sec +5min 04 sec =8 min 10sec !!!!!!!!!
C'è percaso qualche cosa già implementato già in java che permette questo o mi conviene crearmi velocemente un piccolo algoritmo semplice semplice???
qwerty86
15-11-2007, 20:22
Raga...leggendo la traccia dell'esercitazione ho riscontato un'altro problemino...mi chiede di sommare delle durate temporali...detto in parole povere devo sommare le durate delle song...per esempio 3 min 06 sec +5min 04 sec =8 min 10sec !!!!!!!!!
C'è percaso qualche cosa già implementato già in java che permette questo o mi conviene crearmi velocemente un piccolo algoritmo semplice semplice???
bhè potresti memorizzare nel campo durata i secondi , quindi la somma si riduce a sommare dei numeri e poi quando devi fare una stampa "decente" ( minuti secondi) ti fai una conversione
mirkus90
15-11-2007, 20:33
capito tutto...questa idea era venuta anke a me...volevo vedere solo se stava qualche metodo che lo facesse automaticamente al posto di convertirlo "a mano"...ma forse..meglio farlo "a mano" così si sviluppa un pò di sano ingegno...anche in previsione per le olimpiadi....ne serve molto :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.