UnidadDidactica4: LosArrays
Un``Array''esunalistadeelementosdelmismotipo(homognea),cadaunoellosidentificado porunndice. SepuedeaccederaloselementosdelArray(paraguardarorecuperarlainformacin)encualquier orden. ElArrayquedadefinidopor eltipobsicodeelementosqueaglutina, elnmerodeelementos(longitud).
Eslaestructuradedatosqueseusamsfrecuentementeenprogramacin. [Link],lamemoriadelordenadorse gestionacomounArrayenloslenguajesdebajonivel. LosArraysseutilizancontantafrecuenciaquetodosloslenguajesdeprogramacinofrecenalgn modoparautilizarlosconfacilidad.
ArraysenJava
EnJava,losArraypuedenserdecualquiertipodedato,incluidosobjetos. EltipodedatoArrayes,asuvez,unobjeto. LasvariablesdeltipoArraysedeclaranutilizando[],delsiguientemodo:
tipo_basico[] nombre_variable
Porejemplo,
int[] fila;
declaralavariablefiladeltipoArraydedatosdeltipoint. Estasvariablesalmacenarnlareferenciaalobjeto. Paracrearelobjeto,seutilizaeloperadornewdelaforma:
new tipo_basico[numero_de_elementos]
Porejemplo,
fila = new int[100];
creaelobjetoquepuedealmacenar100enteros. Sepuededeclararlavariableycrearelobjetoenlamismainstruccin:
int[] fila = new int[100];
AcadaunodeloselementosdelArrayseaccedeconelnombreseguidodelndiceentre corchetes.Elndicevaraentre0y [Link],
fila[99] = 1763;
,siendo elnmerodeelementosquepuede
almacenaelvalor1763enlaltimaposicindelArrayfila. Cadaunodeloscomponentessepuedeutilizarcomounavariablecualquieradeltipodedato bsicoquealmacena. Porejemplo,elArrayfilaofrecela100variablesdeltipoint:
fila[0], fila[1], ... ,fila[98], fila[99]
[Link] variableespblicaysepuedeaccederaelladirectamentecomouncampodelobjeto. Enelejemplodefila,esteprogramaimprime100:
public class p2t2p1{ public static void main(String[] args) { int[] fila = new int[100]; int cuantos = [Link]; [Link](cuantos);}}
ObjetosArray
Lavariablelength esdeltipofinal,seasignaenlacreacindelobjetoynosepuede modificarposteriormente. Cuandosecreaelobjeto,[Link] tomanelvalorcero,sisonnmerosocaracteres,[Link] setratadereferenciasaobjetos,elvalorpordefectoesnull. [Link],seutilizanlosvaloresentre llavesconelformato
tipo_dato[] variable = { v1 , v2 , v3 , . . . , vN};
donde sonlos valoresqueseasignanalasposiciones Array. Porejemplo,conlainstruccin:
double[] primos20 = {2.,3. 5.,7.,11., 13.,17.,19.};
del
[Link] objeto,primos20.lengthseinicializaconelvalor8,[Link] losvaloressiquesepuedenmodificar,yaqueprimos20[0],...,primos20[7]son8variables deltipodouble. Lasalidadelprograma:
public class p2t2p4{ public static void main(String[] args){ double[] primos20 = {2.,3.,5.,7.,11.,13.,17.,19.}; for(int i = 0;i<[Link];i++) {primos20[i]-=1; [Link](primos20[i] +" "); } }}
ser:1.0 2.0 4.0 6.0 10.0 12.0 16.0 18.0
Arraysbidimensionales
Tambinsepuedeorganizarlainformacinentablasdedosdimensiones,condosndicespara accederaloselementos. Conlainstruccin:
int[][] mat = new int[10][10]
secreaunamatrizcapazdealmacenar100elementosdeltipointyaellosseaccedeconlas
variablesmat[i][j]. Sepuedencreartablasdecualquierdimensin,perohayquellevarcuidadoensuuso,yaquela [Link],lamatriz
int[][][] mat3 = new int[100][100][100]
utilizarmsde4Mbytesdememoriaparaalmacenarelmillndeenteros. UnArraybidimensionaleslaestructuradedatosadecuadaparaalmacenarlainformacindela [Link],sonlosapropiadospara almacenarinformacindetensores. Ilustramossuusoconelprogramasiguiente
public class p2t2p6{ public static void main(String[] args){ int[][] mat = new int[3][5]; for(int i=0;i<[Link];i++) for (int j=0;j<mat[i].length;j++) mat[i][j] = (i+1)*10 + (j+1); for(int i= 0;i<[Link];i++) { for (int j=0;j<mat[i].length;j++) [Link](mat[i][j]+ " "); [Link]();} }}
queproducelasalida:
11 21 31
12 22 32
13 23 33
14 24 34
15 25 35
[Link] est almacenadaenmat[k].length