PDA

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);
}
}

cisc
15-08-2005, 18:44
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 :(

cisc
15-08-2005, 20:26
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??é

cisc
17-08-2005, 11:02
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)

cisc
17-08-2005, 17:23
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.