Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    79

    [Eclipse SDK 3.5.0] Problemi con ArrayList e Array

    Salve,

    sto cercando di creare un arraylist di array standard interi. Ho fatto qualche prova mirata a prendere confidenza con la struttura arraylist, ma giungo ad un punto dove non capisco dove stia il problema:

    codice:
    import java.util.ArrayList;
    
    
    public class main {
    	
    	public static void main(String[] args) 
    	{
    	
    	// Passo 1: prova di base di riempimento e scrittura di ArrayList
    	
    	System.out.println("Passo 1: prova di base di riempimento e scrittura di ArrayList");
    	ArrayList arraymosse= new ArrayList(9);
    	for (int i=0; i<10; i++)
    	{
    		arraymosse.add(i);
    	}
    	
    	for (int i=0; i<arraymosse.size(); i++)
    	{				
    			   		System.out.println(arraymosse.get(i));
    	}
    	
    	// Passo 2: prova di riempimento di ArrayList con vettore int
    	
    	System.out.println("Passo 2: prova di riempimento di ArrayList con vettore int");
    	int []arrayOfXY = new int [2];
    	ArrayList arraymosse2= new ArrayList(9);
    	for (int i=0; i<3; i++)
    	{
    		for (int j=0; j<3; j++)
    		{		
    			   		arrayOfXY[0]=i;
    			   		arrayOfXY[1]=j;
    			   		arraymosse.add(arrayOfXY);
    				
    		}
    	}
    	
    	System.out.println("Passo 3: prova di stampa standard di ArrayList con vettore int");
    	for (int i=0; i<arraymosse.size(); i++)
    	{
    		System.out.println(arraymosse.get(i));
    	}
    	
    	System.out.println("Passo 4: prova di stampa a doppio ciclo di ArrayList con vettore int");
    	for (int i=0; i<arraymosse.size(); i++)
    	{
    		for (int j=0; j<2; j++)
    		{		
    	   		System.out.print(arraymosse.get(i[j]));
    	   		System.out.print(" & ");
    
    				
    		}
    						
    	}
    
    	}
    }

    Siccome ho un Arraylist di array interi di 2 elementi, l'elemento dell'arraylist nella iesima posizione dovrebbe essere dato da arraymosse.get(i). Ma siccome quell'elemento è a sua volta un array di interi di 2 elementi, con arraymosse(i[j]) dovrei riuscire ad estrarre il jesimo elemento dell'iesimo vettore.

    Invece, proprio nella riga:
    System.out.print(arraymosse.get(i[j]));

    viene dato l'errore:

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The type of the expression must be an array type but it resolved to int .

    Come posso fare per indicizzare gli elementi dell'array nell'arraylist? E se avessi un array di arraylist di array, come potrei fare?

    Grazie a tutti!
    "La fortuna aiuta gli audaci"
    (e non gli adagiati)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Eclipse SDK 3.5.0] Problemi con ArrayList e Array

    Originariamente inviato da Loue
    Come posso fare per indicizzare gli elementi dell'array nell'arraylist? E se avessi un array di arraylist di array, come potrei fare?
    Un po' di cose ci sarebbero da farti notare:

    1) Hai usato ArrayList come "raw type". Da Java 5 ci sono i "generics" e tutte le collezioni sono state rese "generiche". E il fatto che hai usato ....add(i) denota che stai usando almeno Java 5, perché questo è un "auto-boxing", passi un int che viene automaticamente "boxato" (dal compilatore) in un Integer. Le collezioni accettano solo oggetti, infatti.
    Quindi sarebbe più appropriato se "parametrizzi" le collezioni. Nel primo caso: ArrayList<Integer>

    2) Il primo passo non fa una piega. Gli int vengono boxati in Integer e nel ciclo di stampa estrai gli Integer che passi direttamente al println. Viene quindi stampato il risultato del toString() invocato sull'oggetto Integer. Quindi appunto mostra il valore numerico.

    3) Nel secondo passo ci sono altre questioni. Intanto istanzi 1 solo array di 2 elementi e lo aggiungi più volte nel ArrayList. Vuol dire tutti gli elementi nel ArrayList faranno riferimento allo stesso identico array. E anche se cambi di volta in volta il contenuto dell'array arrayOfXY, esso è 1 solo e alla fine tutti gli elementi nel ArrayList faranno riferimento all'array nel suo "ultimo" stato.
    Questo è il classico errore che si commette quando non si conosce bene come funzionano i "reference" e le collezioni.

    4) Nel terzo passo fai il ciclo di stampa per l'ArrayList di array. Il fatto è che il get() ti restituisce l'oggetto int[], che tu passi direttamente a println che lo vede come "Object" e gli array non implementano il toString() .... rimane quello ereditato da Object che fornisce la stringa (generalmente poco utile) del tipo es. [I@3e25a5 (per un array di int)
    Volevi stampare gli elementi dell'array?? Allora lo estrai e lo "vedi" come int[] e fai un ciclo per stampare i singoli elementi. O usi il metodo statico Arrays.toString() che fornisce una rappresentazione utile e gradevole degli elementi.

    5) Il quarto passo è proprio sbagliato come sintassi. i[j], beh, i è un int, non puoi certo usare [ ] !!!


    Conclusioni: usa i generics.

    Nel primo caso usa ArrayList<Integer>
    Nel secondo caso usa ArrayList<int[]>. E se il tuo obiettivo è avere array "distinti" per ogni elemento del ArrayList devi chiaramente istanziare N array, non uno solo unico.

    Nel passo 3 puoi quindi fare:

    codice:
    int[] arrElem = arraymosse.get(i);
    Quindi dovresti fare o il classico ciclo per stampare tutti gli elementi o fare:

    codice:
    System.out.println(Arrays.toString(arrElem));
    Il passo 4 è inutile se fai come detto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.