|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
JAVA - Matrici con Arraylist
Salve a tutti, innanzi tutto!
![]() scusate, ho un problema di programmazione con Java. mi servirebbe dichiarare una matrice di ArrayList di ArrayList.... è possibile una cosa di questo tipo? mi servirebbe solo impostarla... il fatto è che la matrice iniziale so di quante righe e colonne deve essere, mentre quello che contiene ogni locazione della matrice è roba piuttosto variabile, ovvero un certo numero di vettori, ognuno di un certo numero di interi... qualcuno avrebbe suggerimenti da darmi? grazie mille in anticipo! ![]() Ultima modifica di FrankieB76 : 12-07-2011 alle 18:02. Motivo: saluto |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Codice:
import java.util.*; public class Prova { public static void main(String[] args) { ArrayList<ArrayList> matrix = new ArrayList<ArrayList>(); ArrayList<Integer> firstRow = new ArrayList<Integer>(); firstRow.add(0, 12); firstRow.add(1, 15); firstRow.add(2, -2); matrix.add(0, firstRow); ArrayList<Integer> secondRow = new ArrayList<Integer>(); secondRow.add(0, 112); secondRow.add(1, 56); secondRow.add(2, 24); secondRow.add(3, 1); matrix.add(1, secondRow); ArrayList<Integer> thirdRow = new ArrayList<Integer>(); thirdRow.add(0, 23); thirdRow.add(1, 2455); matrix.add(2, thirdRow); for(int i = 0; i < matrix.size(); i++) { ArrayList<Integer> row = matrix.get(i); for(int j = 0; j < row.size(); j++) System.out.print(row.get(j) + " "); System.out.println(); } } } Codice:
12 15 -2 112 56 24 1 23 2455 |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
wow! grazie mille Ndakota!!! anche per la rapidità!
la struttura va benissimo, adesso faccio un po' di tentativi per gli inserimenti dei dati da tastiera o in lettura da file! se dovessi avere altri problemi, magari torno a chiedere consiglio!! grazie ancora, buona serata! ![]() Francesco |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Probabilmente il tuo thread verrà chiuso perchè non hai rispettato la convenzione circa l'argomento del thread. Nel caso aprine un altro o scrivimi pure in privato. Ciao
![]() |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
non ho capito... che danni ho fatto?
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Niente di che eh http://www.hwupgrade.it/forum/showthread.php?t=1649196
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
speriamo che resti ancora un po'....
vorrei chiedere una cosa, se ho questo codice: Codice:
public ArrayList prendidati(){ //dichiaro un nuovo ArrayList ArrayList lista = new ArrayList(); // Inizalizzo il reader di opencsv CSVReader reader = null; try { //leggo il file arraylist.csv con il separatore ';' reader = new CSVReader(new FileReader("arraylist.csv"), ';'); } catch (FileNotFoundException e) { e.printStackTrace(); } String [] nextLine; //int j = 0; try { while ((nextLine = reader.readNext()) != null) { for(int i = 0; i < nextLine.length; i++) lista.add (Double.valueOf(nextLine[i]).doubleValue()); } } catch (IOException e) { e.printStackTrace(); } //prova per vedere se memorizza qualcosa (da cancellare alla fine) System.out.println (); for(int i = 0; i < lista.size(); i++) { System.out.print (lista.get(i) + " "); } System.out.println (); // System.out.println ("la lista è: " + lista); return lista; } // fine metodo prendidati mi legge ed inserisce nell'Arraylist "lista" tutti i dati presenti nel file csv, composto di svariate righe a lunghezza variabile. come faccio invece a farlo fermare alla prima riga? ovviamente il risultato finale dovrà essere che riesco ad inserire ogni riga del mio .csv in un ArrayList di ArrayList, ma questa me la vedo io dopo... che suggerimento mi potresti dare? grazie sempre in anticipo! ![]() Ultima modifica di FrankieB76 : 13-07-2011 alle 16:01. Motivo: indentamento codice |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Usa un BufferedReaderal posto di FileReader per leggere il contenuto del file, e poi passa il contenuto letto successivamente al CSVReader: in questo modo ti potrai fermare dopo aver letto la prima riga.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
ok, mi studio il funzionamento e ci provo!
grazie! ![]() |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
salve a tutti.
continuo ad occuparmi di array e ArrayList... ho un problema: nel momento in cui ho dei piccoli array, all'interno di un ciclo for, quindi sotto l'indice "i", nel momento in cui devo inserirle singolarmente in un Arraylist, nella i-esima posizione, come faccio? spiego meglio, ho provato facendo: lista.add(Integer.parseInt(str_list[i])); str_list[i] è l'elemento dell'array dichiarato come: String[] str_list = line.trim().split("\\s") -- (sto leggendo la riga di un file) mentre lista è l'ArrayList, dichiarato come: ArrayList lista = new ArrayList(); e dovrebbe essere un ArrayList di elementi che sono (vorrei che fossero...) ognuno degli array. e già mi viene il dubbio che abbia sbagliato la dichiarazione di lista. dicevo, il problema di fare così, con la ".add", è che aggiunge nell'ArrayList ogni volta l'array a quello precedente, così in parole povere, invece di aggiungere 3 array al mio ArrayList di array, ottengo un Arraylist con dentro i tutti i singoli elementi dei 3 array, uno di fila all'altro. mi sono spiegato bene? non mi fa usare la lista.get(i), perche posso usarla come elemento a destra di una assegnazione con a sinistra una variabile, ma non come elemento a sinistra, che appunto deve essere una variabile... come posso fare per ottenere un mio ArrayList di 3 elementi di tipo array (di interi, tradotti con il parseInt dalle stringhe lette dal file) ???? ![]() grazie mille in anticipo a chiunque voglia rispondere! ![]() |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
hmmm... nessuno ha un suggerimento?
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Se la lista che vuoi dichiarare deve essere una lista di liste di stringhe, usando ArrayList puoi dichiararla così:
Codice:
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); Codice:
String elementToAdd = "stringa da inserire"; ArrayList<String> innerList = list.get(i); innerlist.add(elementToAdd); Codice:
for(int i = 0; i < numInnerLists; i++) { list.add(new ArrayList<String>()); } |
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
ciao wingman87, grazie per la risposta.
allora, alcuni dubbi: il mio lista non è un ArrayList di ArrayList, ma un ArrayList di array. questo perche sto leggendo delle righe da un file, e ogni riga la trasformo in un array con la String[] str_list = line.trim().split("\\s"). il singolo elemento da inserire nell'array list è un array della forma, per esempio: [0 1 2 3]. l'obiettivo finale sarebbe quello di ottenere una roba del tipo: [[0 1 2 3] [0 2 4 6 8] [0 3 4 5 8 9 11 12]]. facendo come faccio io (sbagliando), mi viene invece una roba del tipo: [0 1 2 3 0 2 4 6 8 0 3 4 5 8 9 11 12], ovvero mi aggiunge il pezzetto di array in fila al precedente, non considerandoli come elementi diversi, in posizione diversa nell'ArrayList. detto ciò, come gestisco la seconda e la terza frazione di codice che mi hai suggerito tu? considerato che io so prima quanti sono gli elementi dell'ArrayList (ovvero quati array devo inserire) e so la lunghezza, di volta in volta, degli array. grazie mille. |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Alla fine è solo una questione di tipi, i metodi da usare restano gli stessi. La dichiarazione della lista sarà:
Codice:
ArrayList<String[]> list = new ArrayList<String[]>(); Codice:
list.add(str_list); Oppure puoi utilizzare un ArrayList di ArrayList di String (la dichiarazione è quella del mio primo post) ed aggiungere gli elementi in questo modo: Codice:
Collections.addAll(list, str_list); Riferimenti: http://download.oracle.com/javase/6/...ArrayList.html http://download.oracle.com/javase/6/...llections.html Ultima modifica di wingman87 : 25-08-2011 alle 10:25. |
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
adesso provo con ilprimo suggerimento. in pratica mi dici che banalmente avevo sbagliato la dichiarazione dell'ArrayList, mettendo invece di
ArrayList list = new ArrayList(); un ArrayList<String[]> list = new ArrayList<String[]>(); così dovrebbe funzionare anche la .add che invece a me non funzionava. vediamo che succede. comunque mi sbircio anche la Class Collections che non conoscevo! grazie ancora, ciao! ![]() |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Quote:
La questione dei tipi generici è utile ai fini dei check statici di compilazione, ma non è un errore (non lo è se non li dichiari, e in tal caso il compilatore restituisce un warning, lo è se dichiari i tipi generici sbagliati ma in questo caso il compilatore non compila). |
|
![]() |
![]() |
![]() |
#17 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
guarda, aggiungevo non il singolo elemento array ad una serie di array, ma il contenuto del singolo array veniva messo in fila appresso agli altri contenuti. ma adesso mi sembra chiaro il perche!
![]() |
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
però la .add continua a non funzionare.
io devo aggiungere la mia stringa che è: String[] str_list = line.trim().split("\\s"); ovvero la leggo da un file, e poi faccio la add come: lista.add (Integer.parseInt(str_list[i])); ovviamente col fatto che la lista di stringhe la trasformo in interi ho cambiato anche la dichiarazione dell'ArrayList in: ArrayList <int []> lista = new ArrayList<int []> (); oppure ho provato lasciando la dichiarazione dell'ArrayList con le stringhe, e aggiungendo: lista.add (str_list[i]); ma mi da sempre errore con la add, mi dice di aggiungere un argomento [], cosa che non mi chiedeva le altre volte che l'ho usata... |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Il fatto è che str_list[i] è un elemento dell'array, non l'array.
Quindi con Codice:
lista.add(str_list[i]); Ecco come potresti fare: Codice:
String[] str_list = line.trim().split("\\s"); int numElements = str_list.length; int[] intArray = new int[numElements]; for(int i = 0; i < numElements; i++) { intArray[i] = Integer.parseInt(str_list[i]); } lista.add(intArray); Codice:
ArrayList<int[]> lista = new ArrayList<int[]>(); |
![]() |
![]() |
![]() |
#20 |
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
hai ragione, quell'è l'elemento dell'array, non tutto l'array secco...
adesso provo! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:33.