¡Descarga Fundamentos de Arreglos en Java y más Apuntes en PDF de Programación Java solo en Docsity!
Arreglos
Ania Cravero Leal
Departamento de Ingeniería de Sistemas
Facultad de Ingeniería, Ciencias y Administración
͞WƌŽLJĞĐƚŽĨŝŶĂŶĐŝĂĚŽƉŽƌĞů&ŽŶĚŽĚĞĞƐĂƌƌŽůůŽĚƵĐĂƚŝǀŽ ĚĞ
la Facultad de Ingeniería, Ciencias y Administración de la
UŶŝǀĞƌƐŝĚĂĚĚĞ>Ă&ƌŽŶƚĞƌĂ͟
Capítulo
Versión
TEMARIO
6.1 Conceptos Básicos
6.2 Arreglos Unidimensionales
6.2.1 Declaración de arreglos
6.2.2 Acceso a un arreglo
6.2.3 Inicialización de arreglos
6.2.4 Utilizando ciclos para
acceder a un arreglo
6.2.5 Búsquedas
6.2.6 Ordenamiento
6.3 Arreglos Multidimensionales
6.3.1 Fundamentos de arreglos
multidimensionales
6.3.2 Matrices
6.3.3 Declaración de matrices
6.3.4 Acceso a una matriz
6.4 Cadenas
6.4.1 Fundamentos de cadenas
6.4.2 Declaración de cadenas
6.4.3 Lectura y escritura de
cadenas
6.4.4 Funciones propias para
cadenas
6.5 Ejercicios Resueltos
6.6 Ejercicios Propuestos
6.7 Comentarios Finales
Arreglos
Usamos un arreglo para procesar una colección de datos
del mismo tipo, como una lista de temperaturas
registradas durante un día o una lista de nombres
obtenida desde un archivo de alumnos de un curso. En
este capítulo te presentaremos los fundamentos de la
definición y uso de arreglos en el lenguaje Java, y muchas
de las técnicas básicas que se emplean para diseñar
algoritmos y programas que usan arreglos.
6.1 Conceptos Básico
Supongamos que deseamos obtener las temperaturas del día viernes
cada una hora, con el fin de determinar cuál fue la temperatura más
alta, cuál fue la más baja, y cuál es el promedio de las mismas. No
sabremos cuál es la temperatura más alta o más baja hasta que
leamos todas las temperaturas, por tanto, debemos mantener en la
memoria las 24 temperaturas para que, una vez determinada la
temperatura más alta, cada temperatura se pueda comparar con ella.
Para retener las 24 temperaturas requerimos algo equivalente a 24
variables de tipo int. Podríamos usar 24 variables individuales, pero
no es fácil seguir la pista a 24 variables, y probablemente más
adelante quisiéramos cambiar nuestro programa para registrar
temperaturas cada media hora, o en cada minuto. Sin lugar a dudas
48 o más variables será poco práctico. Un arreglo es la solución
perfecta para este tipo de situaciones.
6.2 Arreglos Unidimensionales
Un arreglo unidimensional es capaz de almacenar N datos del mismo tipo, tal y como hemos mostrado en la
figura 6.
Ejemplo 6.1:
Algunos ejemplos de declaración de arreglos unidimensionales para el lenguaje Java son los siguientes:
char apellido[] = new char[50];
//declaramos un arreglo que puede almacenar una secuencia de hasta 50 caracteres.
float peso[] = new float[20];
//declaramos un arreglo que puede almacenar 20 números reales.
El ejemplo 6.1 muestra
arreglos declarados
utilizando varios tipos de
datos y tamaños, para
lenguaje Java.
6.2.1 Declaración de arreglos
Como toda variable, antes de utilizar un arreglo debemos declararlo. Es
decir, debemos definir un nombre que lo representa, un tipo de dato, y la
cantidad de celdas que tendrá. La figura 6.2 presenta un ejemplo de
declaración en el lenguaje Java.
Figura 6.2: Ejemplo declaración de un arreglo unidimensional
Observa que en el lenguaje Java la forma general para declarar un arreglo es
la siguiente:
Tipo nombre[] = new tipo[numCeldas];
Nota : El operador new de Java sirve para realizar las siguientes acciones:
- Separar memoria para el nuevo objeto que se almacenará. En la figura 6.
new separa memoria del computador para almacenar un arreglo de 24
celdas de tipo entero.
- Invocar el método (función) de inicio de la clase llamado constructor. Esto
debido a que en ocasiones Java requerirá crear un gran espacio de
memoria, es decir, se debe construir el espacio.
- Retornar la referencia a un nuevo objeto. En Java los objetos almacenan
referencias, a diferencia de las variables primitivas que almacenan datos.
Entonces, ¿podemos decir que un arreglo es un objeto en Java?
OJO!!: En Java existe un tipo string que crea de manera automática un arreglo que puede almacenar hasta
256 caracteres. La forma de declarar el arreglo en Java es :
String nombre[];
6.2.2 Acceso a un arreglo
Para acceder al contenido de un arreglo debemos utilizar el nombre del arreglo y el índice o posición en
donde está ubicado dicho dato. La figura 6.3 muestra un ejemplo de acceso al arreglo Temperaturas.
Figura 6.3: Ejemplo de acceso a un arreglo unidimensional
La figura anterior muestra el arreglo Temperaturas con 24 datos almacenados. El recuadro verde accede
específicamente al dato ubicado en la posición 3, es decir, la temperatura 16 ºC.
Ejemplo 6.2:
Este ejemplo muestra un programa en lenguaje Java, que accede a cada celda de un arreglo, tanto para almacenar los datos como para procesarlos.
Lenguaje Java:
Nota : El uso de i como índice lo usaremos debido a que es muy común que cualquier programador, o incluso
en los libros, utilicen como índices las letras i, j o k.
Recuerda que el declarar variables con nombres inapropiados no es una buena práctica de programación,
por tanto, esta sería una excepción.
6.2.4 Utilizando ciclos para acceder a un arreglo
Cuando un arreglo dispone de varias celdas de memoria es muy común utilizar ciclos for para acceder a cada
una de las celdas, ya sea para asignar datos, para leer datos desde el teclado, para procesar los datos o para
mostrar cada dato almacenado en las distintas celdas de memoria.
Veamos algunos ejemplos prácticos.
Ejemplo 6.3:
Este ejemplo muestra el promedio de 10 números ingresados en un arreglo de enteros.
Lenguaje Java:
Ejemplo 6.4:
El siguiente programa escrito en Java muestra el mayor de 10 números ingresados por el usuario.
En primer lugar, debemos ingresar los números al arreglo. Para ello utilizamos un ciclo for con un índice i que tomará los valores desde el cero hasta N-1 (es decir 9) a medida que el ciclo se va ejecutando.
Después de ello, podemos buscar el número mayor. Como no sabemos en qué posición se encuentra exactamente utilizaremos una variable auxiliar (variable max ) que se inicializará con el primer número almacenado en el arreglo (es decir numero[0] ). A medida que avanza el ciclo for , debemos comparar el contenido de la variable max con la siguiente celda de memoria (la primera vez compara con numero[1 ]); en caso de que max contiene un número menor a la de la celda que actualmente está comparando ( if (max < numero[i ]) quiere decir que debemos actualizar max con el nuevo número que hasta ahora es el mayor. El proceso finaliza cuando comparamos max con la última celda del arreglo ( numeros[9 ]), si el contenido de ésta es mayor que max , entonces max se vuelve a actualizar con el valor almacenado en numero[9 ], en otro caso, max mantiene su valor actual. La siguiente figura muestra el proceso cuando i varía desde cero hasta N-1.
Observamos que finalmente max almacena el dato 30, que justamente es el número mayor de los ingresados en el arreglo.
¿Qué debemos modificar del programa del ejemplo 6.4 para que muestre el número menor?
¿Es posible encontrar el número menor sin utilizar una variable auxiliar? Comenta con tus compañeros.
WŽƌůŽƚĂŶƚŽ/Ĩ;ĞƐƚĂссϬͿƐĞƌĄĨĂůƐŽĞŝŵƉƌŝŵŝƌĄ͞ůϮ^/ ĞƐƚĄĞŶĞůĂƌƌĞŐůŽ͘͟
OJO!! Cuando escribimos if (esta ==0) es lo mismo que decir si esta es falso. Algunos programadores
prefieren escribir la condición de la siguiente manera.
if (!esta)
Que también significa si esta es falso.
RIESGO índice de arreglo fuera de intervalo : El error de programación más común que se comete al usar
arreglos es tratar de hacer referencia a un elemento inexistente del arreglo. Por ejemplo, considera la
siguiente declaración de un arreglo
int[] notas = new int[6];
Al utilizar el arreglo notas , toda expresión que se use como índice deberá dar uno de los valores enteros 0 a
5 al evaluarse. Por ejemplo, si el programa contiene la sentencia notas[i], la evaluación de i debe dar alguno
de los enteros de 0 a 5. Si la evaluación de i da alguna otra cosa, será un error. En este caso, decimos que el
índice está fuera del intervalo o simplemente que no es válido.
Un ejemplo de error sería si ejecutamos la siguiente instrucción
notas[7] =220;
En este caso, estaríamos almacenado el dato 220 en una zona de memoria ubicada en la supuesta posición 7
del arreglo, y borraríamos lo que estaba almacenado allí, quizás por otra variable o por el propio sistema.
La siguiente figura representa la situación.
6.2.6 Ordenamiento
También existen algoritmos que permiten ordenar una lista de elementos. Algunos de los algoritmos más
conocidos son, el de la burbuja, por selección, por inserción, por intercambio y el quicksort. Estos algoritmos
A continuación te mostramos un programa que permite ordenar números utilizando el famoso algoritmo de
la burbuja.
Un ejemplo de ejecución del algoritmo se muestra a continuación.
El próximo programa escrito en Java permite ordenar los números de un arreglo de manera ascendente de acuerdo al método de ordenamiento de la Burbuja.
¿Cómo podemos ordenar de mayor a menor?
Modifica el programa anterior para solucionar el problema.
6.3 Arreglos Multidimensionales
Java permite declarar arreglos con más de un índice. En esta sección describiremos estos arreglos
multidimensionales.
6.3.1 Fundamentos de arreglos multidimensionales
A veces es útil disponer de un arreglo con más de un índice, ya que nos da la posibilidad de manipular
información que requiere dos o más dimensiones. Por ejemplo, si una empresa desea registrar las ventas
diarias, por un mes, de cada vendedor de la tienda. En este caso necesitamos dos dimensiones: día y
vendedor, y los datos que almacenaríamos en el arreglo son las ventas.
La figura 6.4 muestra un esquema que representa el arreglo bidimensional para registrar las ventas de los
vendedores de la empresa.
Observa que la figura 6.4 muestra un arreglo con dos dimensiones, el número del vendedor para las filas y el
número del día del mes para las columnas. En general la empresa dispone de N vendedores y el mes es de M
días; y las ventas realizadas, que son los datos, son almacenados en las celdas. Así tenemos que la venta del
vendedor 2 el día 1 es de $360.500.
A este tipo de arreglo se le llama comúnmente matriz, ya que para acceder a los valores almacenados
necesitamos conocer el índice de la fila y el índice de la columna de cada celda específica.