|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 3609
|
[Java] Esercizio con liste
Ciao a tutti, qualcuno saprebbe risolvere questo esercizio?
Scrivere il codice di una funzione statica java che permetta di copiare una matrice di generici oggetti in un vettore di liste. Il vettore di liste dovrà essere creato all'interno della funzione e restituito dalla funzione stessa. La lista generica i-esima del vettore di liste dovrà contenere tutti gli elementi della i-esima riga della matrice. poi ne avrei anche un altro in cui si deve scrivere una funzione per gestire una lista... insomma ho un problemino con queste liste!! ![]()
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm In vendita: |Utenti consigliati|: Marcondiron99 |Utenti sconsigliati|: iltoffa, otherman |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
http://www.hwupgrade.it/forum/showthread.php?t=1631648
Spiega cosa non ti e' chiaro e inizia a scrivere qualcosa. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 3609
|
si scusami, hai ragione...
intanto il mio problema in questo esercizio sta nel creare diverse liste quante sono le righe della matrice. come si può fare? edit: ho fatto la prova anche con una sola riga ma mi dà errore... public class MatriceLista { Nodo n; MatriceLista Lista = new MatriceLista(); public MatriceLista() { n = null; } public void add(Object v) { Nodo nuovo = new Nodo(v, n); n = nuovo; } public Object get() { Object rk = n.valore; n = n.next; return rk; } public void crea() { int n = 2; Object matrice[][] = new Object[n][n]; for (int k = 0; k < matrice.length; k++) { int j = 0; Lista.add(matrice[j][k]); } } public void stampa() { while (n != null) System.out.println(Lista.get()); } public static void main(String[] args) { MatriceLista obj = new MatriceLista(); obj.crea(); obj.stampa(); } mi dice Exception in thread "main" java.lang.StackOverflowError
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm In vendita: |Utenti consigliati|: Marcondiron99 |Utenti sconsigliati|: iltoffa, otherman Ultima modifica di Balop : 12-05-2009 alle 10:25. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Penso che tu abbia inquadrato male il problema, proviamo con un esempio:
Abbiamo una matrice fatta così: Codice:
[1][2][3] [4][5][6] [7][8][9] Passata la matrice al metodo statico che dovresti implementare il risultato sarà un vettore: Codice:
[L0][L1][L2] Codice:
[L0]->1->2->3 [L1]->4->5->6 [L2]->7->8->9 |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 3609
|
Quote:
però, proprio come hai visto tu, ad ogni riga corrisponde una lista (che a loro volta faranno parte di un vettore..), ma come faccio a creare n liste (n = numero di righe) nelle quali poi inserire gli oggetti della matrice? non lo so a priori quante righe saranno, e anche se lo sapessi, metti che la matrice è 10x10 non è che posso creare 10 liste ad una ad una...
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm In vendita: |Utenti consigliati|: Marcondiron99 |Utenti sconsigliati|: iltoffa, otherman |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Ah ok, scusa
Quote:
Codice:
LinkedList<E> vettListe=new LinkedList<E>[matrice.length]; for(int i=0;i<vettListe.length;i++) vettListe[i]=new LinkedList<E>(); Invece è proprio quello che devi fare. Come vedi non è molto difficile, sono due righe di codice. |
|
![]() |
![]() |
![]() |
#7 | ||
Senior Member
Iscritto dal: Jul 2005
Messaggi: 3609
|
Quote:
io intendevo che non le volevo creare una ad una facendo: MatriceLista Lista1 = new MatriceLista(); MatriceLista Lista2 = new MatriceLista(); . . MatriceLista ListaN = new MatriceLista(); ![]() Quote:
![]()
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm In vendita: |Utenti consigliati|: Marcondiron99 |Utenti sconsigliati|: iltoffa, otherman |
||
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 3609
|
ormai tanto per concludere la pagina ecco il programma finito (per funzionare funziona, però se c'è qualcosa che non va fatemi sapere):
Codice:
public class MatriceLista { static Object matrice[][] = {{1,2,3},{4,5,6},{7,8,9},{2,6,8}}; static LinkedList<Object> vettListe[] = new LinkedList[matrice.length]; public void crea() { for (int i = 0; i < vettListe.length; i++) vettListe[i] = new LinkedList<Object>(); // System.out.println(vettListe.length); for (int k=0; k<matrice.length; k++){ for (int j=0; j<matrice[0].length; j++){ vettListe[k].add(j, matrice[k][j]); } } } public void stampa() { for (int i=0; i<matrice.length; i++) System.out.println(vettListe[i]); } public static void main(String[] args) { MatriceLista obj = new MatriceLista(); obj.crea(); obj.stampa(); } } ![]() PS: effettivamente avevi ragione, cioè non è che non avevo capito il testo, ma non sapevo come funzionavano le LinkedList, quindi io volevo fare delle semplici liste (infatti c'era la parte inutile dove definivo i nodi ecc che ora non serve più..) e poi "collegarle" in qualche modo in un vettore... quindi non sapevo come fare per crearne n diverse con un ciclo for!! PPS: ho visto che l'avrei potuto fare lo stesso con l'ArrayList che avevo visto, ma che non sapevo lo stesso come funzionasse... ![]()
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm In vendita: |Utenti consigliati|: Marcondiron99 |Utenti sconsigliati|: iltoffa, otherman |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Sono contento che hai risolto, però c'è ancora qualcosa che non va: il testo dell'esercizio richiede che il lavoro sia svolto da una funzione statica che prende in input la matrice e che restituisce il vettore di liste, inoltre sfruttando i generici potresti evitare di usare sempre Object. Quindi in pratica il main sarà una cosa tipo:
Codice:
public static void main(String[] args){ Integer matrice[][] = {{1,2,3},{4,5,6},{7,8,9},{2,6,8}}; LinkedList vettListe[]=creaVettListe(matrice); //Qui poi puoi mettere la stampa dei valori per controllare che funzioni } Codice:
public static <E> LinkedList<E> creaVettListe(E[][] matrice) |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 3609
|
Quote:
![]()
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm In vendita: |Utenti consigliati|: Marcondiron99 |Utenti sconsigliati|: iltoffa, otherman |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Beh sì, devi modificare quasi tutto e tenere solo la logica del metodo. Devi fare solo un lavoro di riorganizzazione.
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 3609
|
Quote:
comunque grazie 1000!! ![]()
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm In vendita: |Utenti consigliati|: Marcondiron99 |Utenti sconsigliati|: iltoffa, otherman |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:57.