PDA

Visualizza la versione completa : array JAVA


iloilo
29-12-2002, 12:15
se inizializzo un array così:
int[] x= new int[dim];
come faccio a variare dinamicamente la dimensione dell'array?

Zero-2
29-12-2002, 13:31
L'array ha questo fattore negativo , una volta inizializzato ad una dimensione non lo si può far variare .
Per fare ciò devi creare un nuovo array della dimensiona che ti serve e poi copiarci i vecchi valori sopra.
Questo è il codice da scrivere se non usi la classe Vector

public class temp{
public static void main(String []args){
//Inizializzo l'array con dimensione 5
int x[]=new int[5];
//Lo rimepio con dei valori crescenti
for(int i=0;i<x.length;i++)
x[i]=i;
//Lo visualizzo
visualizza(x);
//nel caso volessi ridimensionare l'array x
//dovrei fare una cosa del genere
//Creo un nuovo array di dimensione doppia
int tmp[]=new int[x.length*2];
//Gli copio il vecchio mediante il metodo statico di System
//arraycopy(Origine,partenza,destinazione,partenza,n °elementi)
System.arraycopy(x,0,tmp,0,x.length);
//Per mantenere lo stesso nome
x=tmp;
//Canello il riferimento dell'array temporaneo
tmp=null;
//Ora posso aggiungere anche altri elementi
x[5]=6;
//Visualizzo . Si potrebbe anche creare una variabile che
//tenga conto anche del numero di elementi presenti nell'array
//evitando così di visualizzare gli spazi inutilizzati
// dell'array.
visualizza(x);
}

private static void visualizza(int x[]){
for(int i=0;i<x.length;i++)
System.out.print(x[i]+" ");
System.out.println();
}

}

A grandi linee questo è ciò che fa la classe Vector.
Puoi vedere come il codice sia più leggero utlizzandola :)

import java.util.*;

public class temp{
public static void main(String []args){
Vector x=new Vector(5);
for(int i=0;i<5;i++)
x.add(new Integer(i));
visualizza(x);
x.add(new Integer(8));
x.add(new Integer(9));
x.add(new Integer(11));
visualizza(x);
}

private static void visualizza(Vector x){
for(int i=0;i<x.size();i++)
System.out.print(x.get(i));
System.out.println();
}

}

Spero di essere stato chiaro :D e di non averti ctreato più dubbi :confused:

Loading