Está en la página 1de 29

Arreglos

Los arreglos son tipos de datos complejos (en el sentido de que no son atmicos). o Agrupan varios (1 o ms) datos de un mismo tipo, llamado el a tipo base del arreglo. La idea es que tenemos espacio para almacenar varios valores sin tener que denir una variable distinta para cada valor a almacenar. El tipo base de un arreglo puede ser cualquiera de los tipos primitivos de JAVA (int, double, oat etc), e incluso otros tipos complejos (por ejemplo otros arreglos, lo veremos ms a adelante).

Jorge Prez e

Programacin Estructurada en JAVA o

75 / 103

Arreglos
Al igual que las variables debemos hacer una declaracin de o arreglo y asociarlo a un identicador. Por ejemplo, para declarar un arreglo de enteros identicado por arr, hacemos:
int[] arr;

Esto no es suciente para comenzar a usar el arreglo, adems a debemos especicar la cantidad de elementos que queremos almacenar (construir el arreglo)
arr = new int[20];

Con la anterior instruccion estoy especicando que el arreglo tendr espacio para almacenar 20 enteros. a De la misma forma podemos hacer arreglos de otros tipos de datos.
Jorge Prez e Programacin Estructurada en JAVA o 76 / 103

Arreglos

La sintaxis del lenguaje permite referirse a cada uno de los elementos que constituyen el arreglo empleando ndices. Los elementos del arreglo estn numerados en forma a jerrquica y consecutiva, empezando en 0. a Si A es un arreglo de entero de tamao 3, A[0] se reere al n primer espacio del arreglo, A[1] al segundo espacio, y A[2] al ultimo espacio. La idea es que cada espacio puede ser tratado como una variable para hacer asignaciones, construir expresiones, etc.

Jorge Prez e

Programacin Estructurada en JAVA o

77 / 103

Arreglos

Qu muestra el siguiente cdigo? e o


{ int[] A; A = new int[3]; A[0] = 1; A[1] = 2; A[2] = 2 * A[0] + 10 * A[1]; System.out.println(A[2]); }

Jorge Prez e

Programacin Estructurada en JAVA o

78 / 103

Arreglos: declaracin y construccin o o


Los arreglos pueden declararse y construirse al mismo tiempo.
int[] A = new int[20]; double[] D = new double[10];

La primera instruccin declara y crea un arreglo de 20 enteros, o la segunda un arreglo de 10 reales. Tambin se pueden construir asignndoles inmediatamente e a valores.
int[] A = { 2, 3, 5, 7, 9, 11 }; double[] D = { 0.5, 1.0, 1.5, 2.0 };

La primera instruccin crea un arreglo de tamao 6 con los o n seis primeros nmeros primos, la segunda crea un arreglo de 4 u reales.
Jorge Prez e Programacin Estructurada en JAVA o 79 / 103

Arreglos: ndices
Como dijimos la idea de un arreglo es que cada posicin o pueda ser usado como una variable independiente. Para esto se usan los ndices que indican la posicin del o espacio al que se hace referencia Un ndice puede ser una expresin cualquiera que se evale o u como un entero positivo. Por ejemplo, luego se ejecutar el siguiente cdigo o
int[] A = { 1, 2, 3, 2, 1 }; int i, x, y; i = 3; x = A[2 * i - 4]; y = A[A[i]] + 3;

Cules son los valores de las variables x e y? a


Jorge Prez e Programacin Estructurada en JAVA o 80 / 103

Arreglos: ndices

De la misma forma se pueden usar expresiones en los ndices para asignaciones. Por ejemplo, luego se ejecutar el siguiente cdigo o
int[] A = new int[4]; int i = 1; A[i - 1] = 1; A[A[0]] = 2; A[i + A[0]] = A[1]; A[A[A[2 - i]] + i] = 3;

Cules son los valores del arreglo A? a

Jorge Prez e

Programacin Estructurada en JAVA o

81 / 103

Arreglos: ndices
El poder poner expresiones en los ndices nos permiten asignar valores a un arreglo ingresados por el usuario
{ double[] A = new double[10]; int i; for(i = 0; i < 10; i++) { System.out.println("Ingrese un nmero"); u A[i] = In.readDouble(); } System.out.print("Los datos ingresados son: "); for(i = 0; i < 10; i++) { System.out.print(A[i] + " "); } }

Jorge Prez e

Programacin Estructurada en JAVA o

82 / 103

Arreglos: Ejercicios
1. Pedir 10 nmeros enteros y luego un entero x y mostrar el u nmero de los ingresados que est ms cercano a x. u a a 2. Pedir 20 nmeros enteros x1 , x2 , . . . , x20 y luego imprimirlos u en el orden x1 , x20 , x2 , x19 , . . . , x10 . 3. Pedir 20 nmeros enteros y luego un entero x y mostrar u cuntas veces aparece x entre los nmeros ingresados. a u 4. Pedir 20 nmeros enteros y luego mostrar cada nmero u u distinto ingresado, por ejemplo si se ingresan 1, 2, 1, 2, . . . , 1, 2 se debiera mostrar slo 1 y 2. o 5. Pedir 20 nmeros enteros y luego mostrar cada nmero u u distinto ingresado y la cantidad de veces que ese nmero u aparece. Por ejemplo si se ingresan 1, 2, 1, 2, . . . , 1, 2 se debiera mostrar 1 : 10 y 2 : 10.
Jorge Prez e Programacin Estructurada en JAVA o 83 / 103

Arreglos
Los arreglos son tipos no atmicos de datos (objetos), por lo o tanto cuando declaramos un arreglo
int[] peso;

Estamos creando la variable peso la cual es una referencia a un lugar de la memoria donde posteriormente el arreglo de enteros se almacenar f a sicamente. Sin embargo, hasta este momento no hemos creado un arreglo de enteros. Cuando construimos el arreglo se asigna la memoria correspondiente
peso = new int[10];

Ahora peso apunta a un espacio reservado para 10 enteros.

Jorge Prez e

Programacin Estructurada en JAVA o

84 / 103

Arreglos y referencias
Veamos paso a paso que pasa cuando ejecutamos este cdigo: o
double[] A = new double[10]; double[] B; B = A; A[4] = 4.5; System.out.println(B[4]); double[] C = {1.0,2.0,3.0}; B=C; int i; for(i = 0; i < 3; i++) { System.out.println(B[i]); }
Jorge Prez e Programacin Estructurada en JAVA o 85 / 103

Arreglos y referencias

double[] A = new double[10];

Creamos una variable A que es una referencia a un arreglo (que tambin creamos) de 10 elementos de tipo double. e
double[] B;

Creamos una variable B que es una referencia a un arreglo de elementos de tipo double pero an no creamos ningn arreglo al u u que apunte B.
B = A;

A B se le asigna lo referenciado por A (asignacin de referencias). o

Jorge Prez e

Programacin Estructurada en JAVA o

86 / 103

Arreglos y referencias

A[4] = 4.5;

Asignamos al elemento de ndice 4 del arreglo A el valor 4.5.


System.out.println(B[4]);

Qu se imprime en pantalla? e
4.5 double[] C = {1.0,2.0,3.0};

Creamos una variable C que apunta a un arreglo de 3 elementos de tipo double.

Jorge Prez e

Programacin Estructurada en JAVA o

87 / 103

Arreglos y referencias

B = C;

A B se le asigna lo referenciado por C (asignacin de referencias). B o deja de hacer referencia al mismo arreglo que A y ahora hace referencia a un arreglo de 3 elementos.
int i; for(i = 0; i < 3; i++) { System.out.println(B[i]); }

Qu imprime esto? e
1.0 2.0 3.0

Jorge Prez e

Programacin Estructurada en JAVA o

88 / 103

Arreglos referencias y tipos de datos

Si tenemos:
double[] B; int[] C = {1,2,3}; B = C;

Qu pasa en este caso? e Producir un error pues B puede hacer referencia slo a un a o arreglo de elemtos de tipo doubles.

Jorge Prez e

Programacin Estructurada en JAVA o

89 / 103

Strings
Los Strings Son tipos de datos similares a los arreglos, pero en este caso se usan para almacenar texto (cadenas de caracteres). Verstiles para hacer programas que manipulen texto. a Declaracin de un string: o
String s;

Declaracin e inicializacin de un string: o o


String s = "Este es el valor inicial";

Crear un string a partir de otros:


String s1 = "Hola, "; String s2 = " qu tal?"; e String s3 = s1 + s2;
Jorge Prez e Programacin Estructurada en JAVA o 90 / 103

Strings y referencias

Al igual que con los arreglos una variable de tipo String es una referencia a una posicin de memoria donde se encuetra o el texto f sicamente almacenado. Qu muestra este trozo de cdigo? e o
String s1 = "Blanco"; String s2 = "Azul"; s1 = s2; s2 = "Rojo"; System.out.println(s1 + " " + s2);

Jorge Prez e

Programacin Estructurada en JAVA o

91 / 103

Strings, comparaciones
Tomando en cuenta que las variables de tipo String son referencias, debemos entender a que nos referimos si preguntamos si:
s1 == s2

En este caso el valor de la expresin va a ser verdadero si o ambas variables apuntan (o hacen referencia) al mismo lugar de la memoria, y falso en caso contrario. Qu muestra el siguiente cdigo? e o
String s1 = "Rojo"; String s2 = "Rojo"; if (s1 == s2) { System.out.println("Misma referencia!");}

Jorge Prez e

Programacin Estructurada en JAVA o

92 / 103

Comparando Strings JAVA


Para comparar el contenido de dos strings se usa el mtodo e (instruccin) especial equals. o Si s1 es un string que quiero comparar con s2 se hace
s1.equals(s2)

El resultadp de la instruccin es un valor de verdad, verdadero o si los strings tiene el mismo contenido, falso en otro caso. Qu muestra el siguiente cdigo? e o
String s1 = "Rojo"; String s2 = "Rojo"; if (s1.equals(s2)) { System.out.println("Mismo texto!");}

Jorge Prez e

Programacin Estructurada en JAVA o

93 / 103

Strings y arreglos
Dados que los strings son tipos de datos podemos hacer arreglos de strings, se la misma forma que lo haciamos con los otros tipos de datos:
String[] nombres; nombres = new String[4]; nombres[0] = "Juan"; nombres[1] = "Pepe"; nombres[2] = "Pedro"; nombres[3] = "Maria";

O equivalentemente
String[] nombres = {"Juan","Pepe","Pedro","Maria"};

Nuestro primer acercamiento a arreglos ms complejos. a

Jorge Prez e

Programacin Estructurada en JAVA o

94 / 103

Arreglos bidimensionales o matrices


Algunos datos vienen en dos dimensiones:
Tableros, mapas, reas, imgenes (dibujos), matrices, planillas a a de clculo, etc. a

Arreglos bidimensionales:
Dos ndices en lugar de uno. Dimensin: n m o Fila, Columna: [x][y] Si A es un arreglo bidimensional A[2][4] es un valor espec co en el arreglo. Se pueden ver como matrices.

Ejemplo: Notas de alumnos tabuladas, una la para cada alumno (en cierto orden) una columna para cada nota de pruebas.

Jorge Prez e

Programacin Estructurada en JAVA o

95 / 103

Arreglos bidimensionales o matrices


Declaracin o
int[][] tablero;

Construccin o
tablero = new int[8][8];

Podemos declarar y construir al mismo tiempo


int[][] tablero = new int[8][8];

Inicializacin en la declaracin (2 3) o o
int[][] numero = {{1,3,5}, {3,6,7}};

En este ultimo caso numero[1][2] es 7.

Jorge Prez e

Programacin Estructurada en JAVA o

96 / 103

Arreglos bidimensionales o matrices


Recuerden que tanto en arreglos unidimensionales como en matrices podemos ver a cada elemento como una variable. La diferencia est en que cuando creamos un matriz: a
double[][] A = new double[20][30];

Estamos creando 20 30 elementos (que podemos ver como variables) de una sola vez. Por lo tanto podemos tratar a cada elemento igual como tratamos a una variable.
double a,b; a = A[1][2] + A[0][0] + 3; b = A[1][2]*A[0][0]; A[a+3][b-1] = 6;

Jorge Prez e

Programacin Estructurada en JAVA o

97 / 103

Leyendo una matriz desde el usuario


Podemos leer los valores se una matriz de 3 3 con el siguiente cdigo o
double[][] A = new double[3][4]; int i,j; for(i = 0; i < 3; i++) { for(j = 0; j < 4; j++) { System.out.println("Dime un nmero?"); u A[i][j] = In.readDouble(); } }

De forma similar podemos mostrar los elementos de una matriz, solo cambie el contenido del for anidado por System.out.println(A[i][j]).
Jorge Prez e Programacin Estructurada en JAVA o 98 / 103

Operaciones de matrices
Dadas dos matrices (usuales) A de n m y B de n m podemos sumarlas para crear una matriz C de n m tal que Cij = Aij + Bij Ejercicio: construya un programa que dados dos matrices JAVA A y B construya una tercera correspondiente a la suma. Dada una matriz (usual) A de n m la matriz traspuesta At es una matriz de m n tal que At = Aji ij Una matriz A es simtrica si A = At . e Ejercicio: haga un programa en JAVA que dada una matriz construya la matriz traspuesta. Ejercicio: haga un programa que determine si una matriz es simtrica. e
Jorge Prez e Programacin Estructurada en JAVA o 99 / 103

int[][] A ={{1,2,3,4}, {5,6,7,8}}; int[][] B ={{1,4,5,6}, {4,8,9,7}}; int n = 2, m = 4; // dimensiones de las matrices

int[][] C = new int[n][m]; int i,j; for(i = 0; i < n ; i++) { for(j = 0; j < m ; j++) { C[i][j] = A[i][j] + B[i][j]; } } //Ahora imprimos cada fila de C for(i = 0; i < n ; i++) { for(j = 0; j < m ; j++) { System.out.print(C[i][j] + " "); } System.out.println(); }
Jorge Prez e Programacin Estructurada en JAVA o 100 / 103

Operaciones de matrices

Dadas dos matrice (usuales) A de n m y B de m l podemos multiplicarls para creando una matrix C de n l tal que
m

Cij =
k=1

Aik Bki

Ejercicio: construya un programa que dados dos matrices JAVA A y B construya una tercera correspondiente a la multiplicacin (ojo que en la denicin matemtica se o o a suponen los ndices partiendo desde 1).

Jorge Prez e

Programacin Estructurada en JAVA o

101 / 103

int[][] A = {{2,3,8},{9,5,4},{7,8,3},{4,6,8}}; // 4 x 3 int[][] B = {{1,4,7},{2,5,8}}; // 3 x 2 int n = 4, m = 3, l = 2; int[][] C = new int[n][l]; int i,j,k,suma; for(i = 0; i < n; i++) { for(j = 0; j< l; j++) { for(k = 0, suma = 0; k < m; k++) { suma = suma + A[i][k] * B[k][j]; } C[i][j]= suma; } } for(i = 0; i < n; i++) { for(j = 0; j < l; j++) { System.out.print(C[i][j]+ " "); }
Programacin Estructurada en JAVA o

Jorge Prez e

102 / 103

Arreglos multidimensionales

Hasta ahora hemos visto arreglos unidimensionales y bidimensionales. Sin embargo, podemos tener arreglos con las dimensiones que uno desee. Por ejemplo, podemos tener arreglos de 3, 4 o 5 dimensiones. Por ejemplo: char[][][] A = new char[2][3][6]; Aqu hemos creado 2 3 6 elementos de tipo char. int[][][][] B = new int[2][2][2][2]; Aqu hemos creado 2 2 2 2 elementos de tipo int.

Jorge Prez e

Programacin Estructurada en JAVA o

103 / 103

También podría gustarte