View Full Version : [Java] Uso Array List
GiulioCesare
15-08-2005, 18:01
Salve ho fatto un piccolo programma per capire come funziona la classe ArrayList. Ho una struttura dati che contiene il nome di una persona e la sua età, il ciclo di riempimento della struttura termina quando al campo età inserisco il valore zero. Il programma a quanto pare funziona bene, fino a quando provo a stampare la struttura precedentemente riempita. Spero che qualcuno vorrà aiutarmi, comunque questo è il codice
import java.util.*;
import javax.swing.*;
class dati
{
dati(String n, int v)
{
int voto;
String nome;
voto=v;
nome=n;
}
}
public class vettdim
{
public static void main (String[] args)
{
ArrayList a = new ArrayList();
int x=0;
String y;
y = JOptionPane.showInputDialog("Inserire età");
x = Integer.parseInt(y);
while(x!=0)
{
y = JOptionPane.showInputDialog("Inserire nome");
a.add(new dati(y,x));
y = JOptionPane.showInputDialog("Inserire età");
x = Integer.parseInt(y);
}
for(int i=0;i<=a.size();i++)
{
System.out.println(a.get(i));
}
System.exit(0);
}
}
be, a parte che ti consiglierei di usare i generics (ArrayList<Dati> a=new ArrayList<Dati>();), se nella classe dati le variabili di istanza le dichiari nel costruttore, penso che non memorizzerai niente, poi ti consiglierei di ridefinire il metodo toString():
class dati
{
int voto;
String nome;
dati(String n, int v)
{
voto=v;
nome=n;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("nome: ").append(nome).append(" voto:").append(voto);
return sb.toString();
}
}
per il for finale puoi utilizzare questo:
for(dati d:a)
{
System.out.println(d);
}
GiulioCesare
15-08-2005, 19:50
I dati vengono memorizzati nella struttura, l'unico problema è come visualizzarli in output :(
vabbè, con il tuo codice non salvi niente nella struttura, cmq, potresti postare cosa fa precisamente il prog, cosa stampa? hai provato le mie modifiche?
franksisca
17-08-2005, 09:46
Per prima cosa int voto;
String nome;
public Dati(int x, String y){
voto=x;
nome=y;
}
e poi per fare la stampa devi ridefinire il metodo toString(come ha detto cisc ;) )
public String toString(){
return this.nome+"_"+this.voto;
}
franksisca
17-08-2005, 09:49
per il for finale puoi utilizzare questo:
for(dati d:a)
{
System.out.println(d);
}
Finalmente qualcuno che usa il for della JDK TIGER, mi potresti spiegare come funziona???
Nigro lo ha fatto quest'anno??é
Finalmente qualcuno che usa il for della JDK TIGER, mi potresti spiegare come funziona???
Nigro lo ha fatto quest'anno??é
Nigro non so, Furfaro si :) , praticamente si può applicare a tutte le istanze di classi che implementano l'interfaccia Itreable (Collection estende Iterable, quindi...) e agli array, devi mettere il nome del tipo di oggetti contenuti nell'Iterable (o nell'array), seguito da un identificatore che ti identifica ogni volta l'oggetto ottenuto nel ciclio, poi i : seguiti dall'Iterable (o array). Alla fine ti permette di iterare si un Iterable senza dover usare in iteratore, l'unico problema e che non puoi modificare l'Iterable, ma puoi solo scorrere in lettura. E' chiaro che ogni volta in d (prendo in esame l'esempio precedente) c'hai un oggetto dati differente dell'ArrayList a. Spero di essere stato chiaro, anche se non so spiegarmi molto bene, cmq non è difficile ;)
franksisca
17-08-2005, 15:07
praticamente d diventa l'iteratore che contiene l'oggetto di a???
quindi tu stampando d, stampi ogni volta un singolo oggetto di a(con riferimento all'esempio)
praticamente d diventa l'iteratore che contiene l'oggetto di a???
quindi tu stampando d, stampi ogni volta un singolo oggetto di a(con riferimento all'esempio)
allora d non è l'iteratore, diciamo che tutto il meccanismo funziona grazie all'iterator, ma d è ogni volta un oggetti diverso di a
franksisca
18-08-2005, 09:22
;) , credo di aver capito.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.