You are on page 1of 12

Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

Arrays en Java
Definición
Un array (arreglo) es una estructura de datos que contiene una colección de datos del mismo tipo a los
cuales se pueden acceder por su identificador y uno o varios índices entre un par de [ ].

Ejemplos:
- Temperaturas mínimas de los últimos treinta días
- Valor de las acciones de una empresa durante la última semana
- Nombres y apellidos de personas inscritas en una institución
- Notas de calificación de todos estudiantes de la materia de Programación

Propiedades
- Los arrays se utilizan como contenedores para almacenar datos relacionados (en vez de declarar
variables por separado para cada uno de los elementos del array). Para ello se debe declarar con un
nombre o identificador.

- Todos los datos incluidos en el array son del mismo tipo. Se pueden crear arrays de enteros de tipo into
de reales de tipo float, pero en un mismo array no se pueden mezclar datos de tipo int y datos de tipo
float.

- El tamaño del array se establece cuando se crea el array (con el operador new, igual que cualquier otro
objeto).

- A los elementos del array se accederá a través de la posición o índice que ocupan dentro del conjunto de
elementos del array.

Terminología
Los arrays unidimensionales se conocen con el nombre de vectores. Los arrays bidimensionales se conocen
con el nombre de matrices.

Declaración y Creación

 Para declarar un array, se utilizan corchetes para indicar que se trata de un array y no de una simple
variable del tipo especificado.

En vectores:

tipo nombreVector[];
o bien
tipo[] nombreVector;

donde:
[]: indica que se trata de un array unidimensional
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

tipo: es el tipo de dato de los elementos del vector


nombreVector: es el identificador o nombre del vector

En matrices matriz:

tipo nombreMatriz[][];
o bien
tipo[][] nombreMatriz;

donde:
[][]: indica que se trata de un array bidimensional
tipo: es el tipo de dato de los elementos del vector
nombreMatriz: es el identificador de la matriz

Ejemplos:

int lista[];
char lista_letras[];
String lista_nombres[];

int lista[][];
char lista_letras[][];
String lista_nombres[][];

 Para crear arrays se utiliza el operador new.

En vectores:

vector = new tipo[tamaño];

donde:
Entre corchetes se indica el tamaño del vector.
Vector:debe ser una variable declarada como tipo[]
Tipo:debe coincidir con el tipo con el que se haya declarado el vector.
Tamaño:es la cantidad de elementos que tendrá el vector.

Ejemplos:

lista = new int[10];


lista_letras = new char[N];
lista_nombres[]=new String[100];

float notas[] = new float[3];


Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

En matrices:

matriz = new tipo[filas][columnas];

donde:
Entre corchetes se indica el tamaño de la matriz.
matriz: debe ser una variable declarada como tipo[][]
tipo: debe coincidir con el tipo con el que se haya declarado la matriz.
tamaño: es la cantidad de elementos que tendrá la matriz.

Ejemplo

lista = new int[10][10];


lista_letras = new char[M][N];
lista_nombres[]=new String[100][100];

char letras[][] = new char[3][4];

letras

 NOTA: También se puede declarar y crear arrays al mismo tiempo, es decir en una sola línea de
código:

tipo vector[] = new tipo[tamaño];

tipo matriz[][] = new tipo[filas][columnas];

Ejemplos:

int lista[] = new int[10];


char lista_letras[] = new char[N];
String lista_nombres[]=new String[100];

int lista[][] = new int[10][10];


char lista_letras[][] = new char[M][N];
String lista_nombres[][]=new String[100][100];
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

Otros ejemplos:

int[] temperaturas = new int[7];


float[] estatura = new float[N*10];
String[] departamentos = new int[9*5];

int[][] temperaturas = new int[tam][tam-1];


char[][] letras = new char[10][N];
String[][] nombres = new nombres[100][2];

Donde M y N son valores inicializados en un valor numérico o introducidos desde teclado.

Uso
Para acceder a los elementos de un array, utilizamos índices (para indicar la posición del elemento dentro del
array)

En vectores:

vector[índice]

- En Java, el índice de la primera componente de un vector es siempre 0, por lo que vector[0] es el


primer elemento del vector.
- El tamaño del vector puede obtenerse utilizando la propiedad length.
 vector.length nos da el número total de elementos del vector
- Por tanto, el último elemento del vector es: vector[vector.length-1]

En matrices:

matriz[índice_filas][índice_columnas]

Una matriz, en realidad es un vector de vectores:

- En Java, el índice de la primera componente de un vector es siempre 0, por lo que matriz[0][0]será el


primer elemento de la matriz.
- El tamaño de la matriz puede obtenerse utilizando la propiedad length
 matriz.length nos da el número total de filas
 matriz[0].length nos da el número total de columnas
- Por tanto, el último elemento de la matriz es: matriz[matriz.length-1][matriz[0].length-1]

Inicialización en la declaración
Podemos asignarle un valor inicial a los elementos de un array en la propia declaración:

int vector[] = {1,2,3,5,7};

int matriz[][] = {{1,2,3},{4,5,6}};

El compilador deduce automáticamente las dimensiones del array.


Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

Manipulación de vectores y matrices


Las operaciones se realizan componente a componente

Ejemplo: Suma de los elementos de un vector

static float media(float datos[])


{
int i;
int n = datos.length;
float suma = 0;

for(i=0; i<n; i++)


suma = suma + datos[i];

return (suma/n);
}

No es necesario utilizar todos los elementos de un vector, por lo que, al trabajar con ellos, se puede
utilizar una variable entera adicional que nos indique el número de datos que realmente estamos o
queremos utilizar:

El tamaño del vector nos dice cuánta memoria se ha reservado para almacenar datos del mismo tipo, no
cuántos datos del mismo tipo tenemos realmente en el vector.

Ejemplo 1: Dado un vector A, llenarlo con N números enteros, posteriormente visualizar y obtener la suma
de los elementos de dicho vector.

import java.util.Scanner;

public class Vector01


{
public static void main (String[] args)
{
//instruccion para habilitar la captura de datos desde el teclado
Scanner lee = new Scanner(System.in);

System.out.print("Intro N: ");
int N = lee.nextInt();

//declaracion y creacion del vector


int A[] = new int[N];

int s = 0;

//lee uno por uno los datos para el vector


for(int i=0; i < N; i++){
System.out.print("Intro un numero: ");
A[i]=lee.nextInt();
}

//suma uno por uno los datos del vector


for(int i=0; i < N; i++){
s = s + A[i];
}
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

//muestra uno por uno los datos del vector


for(int i=0; i < N; i++){
System.out.print("["+A[i]+"]");
}

System.out.print("\nSuma = "+s);
}
}

Ejemplo 2: Dados 2 vectores con números pares e impares, obtener y visualizar el promedio (media) de
dichos vectores.

public class Vector02


{
public static void main (String[] args)
{
int pares[] = { 2, 4, 6, 8, 10 };
int impares[] = { 1, 3, 5, 7 };
int sp=0, si=0;

System.out.println("Vector Pares");
for (int i=0; i < pares.length; i++)
System.out.print("["+pares[i]+"]");

System.out.println("\nVector Impares");

for (int i=0; i < impares.length; i++)


System.out.print("["+impares[i]+"]");

for (int i=0; i < pares.length; i++)


sp = sp + pares[i];

for (int i=0; i < impares.length; i++)


si = si + impares[i];

System.out.println("\nMedia pares = "+sp);


System.out.println("Media impares = "+si);
}
}
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

Ejemplo 3: Dado un vector A llenarlo con N números enteros y finalmente mostrar dicho vector utilizando
funciones.

import java.util.Scanner;

public class Vector03


{
public static void main (String[] args)
{
//instruccion para habilitar la captura de datos desde el teclado
Scanner lee = new Scanner(System.in);

System.out.print("Intro N: ");
int N = lee.nextInt();

//declaracion y creacion del vector


int A[] = new int[N];

//llama al metodo o funcion llenar vector


llenarVector(N,A);

//llama al metodo o funcion mostrar vector


mostrarVector(A);

public static void llenarVector(int n, int v[])


{
Scanner lee = new Scanner(System.in);

for (int i=0; i < n; i++) {


System.out.print("Intro un numero: ");
v[i] = lee.nextInt();
}
}

public static void mostrarVector(int v[])


{
for (int i=0; i < v.length; i++)
System.out.print("["+v[i]+"]");
}

}
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

Ejemplo 4: Dado un vector A llenarlo con N números enteros, posteriormente mostrar los datos de dicho
vector y obtener el menor elemento. Todo ello utilizando funciones.

import java.util.Scanner;

public class Vector04


{
public static void main (String[] args)
{
//instruccion para habilitar la captura de datos desde el teclado
Scanner lee = new Scanner(System.in);

System.out.print("Intro N: ");
int N = lee.nextInt();

//declaracion y creacion del vector


int A[] = new int[N];

//llama al metodo o funcion llenar vector


llenarVector(N,A);

//llama al metodo o funcion mostrar vector


mostrarVector(A);

//llama al metodo o funcion encuentra menor elemento


System.out.println(menorElementoVector(A));
}

public static void llenarVector(int n, int v[])


{
Scanner lee = new Scanner(System.in);

for (int i=0; i < n; i++) {


System.out.print("Intro un numero: ");
v[i] = lee.nextInt();
}
}

public static void mostrarVector(int v[])


{
for (int i=0; i < v.length; i++)
System.out.print("["+v[i]+"]");
}
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

public static int menorElementoVector(int v[])


{
int men = 99999;

for (int i=0; i < v.length; i++) {


if(v[i] < men)
men = v[i];
}

return (men);
}
}

Ejemplo 5: Dado una matriz A de tamaño MxN, llenarlo con números enteros, posteriormente visualizar la
matriz y obtener la suma de todos los elementos de dicha matriz.

import java.util.Scanner;

public class Matriz01


{
public static void main (String[] args)
{
//instruccion para habilitar la captura de datos desde el teclado
Scanner lee = new Scanner(System.in);

System.out.print("Intro tamaño de filas: ");


int M = lee.nextInt();
System.out.print("Intro tamaño de columnas: ");
int N = lee.nextInt();

//declaracion y creacion de la matriz


int A[][] = new int[M][N];

int s = 0;

//lee uno por uno los datos para la matriz


for(int i=0; i < M; i++){
for(int j=0; j < N; j++){
System.out.print("Intro un numero: ");
A[i][j]=lee.nextInt();
}
}

//suma uno por uno los datos de la matriz


for(int i=0; i < M; i++){
for(int j=0; j < N; j++){
s = s + A[i][j];
}
}

//muestra uno por uno los datos de la matriz


for(int i=0; i < M; i++){
for(int j=0; j < N; j++){
System.out.print("["+A[i][j]+"]");
}
System.out.print("\n");
}
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

System.out.print("\nSuma = "+s);
}
}

Ejemplo 6: Dado una matriz A, llenarlo con N números enteros y visualizar los datos. Finalmente determinar
el mayor elemento de la matriz. Todo lo anterior realizarlo utilizando funciones.

import java.util.Scanner;

public class Matriz02


{
public static void main (String[] args)
{
//instruccion para habilitar la captura de datos desde el teclado
Scanner lee = new Scanner(System.in);

System.out.print("Intro tamaño de filas: ");


int m = lee.nextInt();
System.out.print("Intro tamaño de columnas: ");
int n = lee.nextInt();

//declaracion y creacion de la matriz


int A[][] = new int[m][n];

//llama al metodo o funcion llenar matriz


llenarMatriz(m,n,A);

//llama al metodo o funcion mostrar matriz


mostrarMatriz(A);

//llama al metodo o funcion encuentra mayor elemento


System.out.println("Mayor elemento: "+mayorElementoMatriz(A));
}

public static void llenarMatriz(int m, int n, int M[][])


{
Scanner lee = new Scanner(System.in);

for (int i=0; i < m; i++) {


Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

for (int j=0; j < n; j++) {


System.out.print("Intro un numero: ");
M[i][j] = lee.nextInt();
}
}
}

public static void mostrarMatriz(int M[][])


{
for (int i=0; i < M.length; i++){
{
for (int j=0; j < M[0].length; j++)
System.out.print("["+M[i][j]+"]");
}
System.out.print("\n");
}
}

public static int mayorElementoMatriz(int M[][])


{
int may = -99999;

for (int i=0; i < M.length; i++) {


for (int j=0; j < M[0].length; j++) {
if(M[i][j] > may)
may = M[i][j];
}
}
return (may);
}
}

IMPORTANTE:

- Cuando se pasa un array como parámetro a una función o método se copia una referencia al array y no
el conjunto de valores en sí.
- Por tanto, tenemos que tener cuidado con los efectos colaterales que se producen si, dentro de un
módulo, modificamos un vector que recibimos como parámetro.
Estructura de Datos Ing. Victor Hugo Ticonipa Ch.

Ejemplo

El siguiente método muestra los elementos de un vector ya creado y que es pasado como parámetro de
entrada en una función o método.

static void mostrarVector (int[] datos)


{
for (int i=0; i<datos.length; i++)
System.out.println(datos[i]);
}

Copia de arrays
La siguiente asignación sólo copia las referencias, no crea un nuevo array:

int[] datos = vectorPares;

Para copiar los elementos de un array, hemos de crear un nuevo array y copiar los elementos uno a uno

int[] datos = new int[vectorPares.length];


for(i=0; i< vectorPares.length; i++)
datos[i] = vectorPares [i];

También podemos utilizar una función predefinida en la biblioteca de clases estándar de Java:

System.arraycopy(from,fromIndex,to,toIndex,n);

En el ejemplo anterior:

int[] datos = new int[pares.length];


System.arraycopy(pares,0,datos,0,pares.length);

NOTA:

La biblioteca de clases de Java incluye una clase auxiliar llamada java.util.Arrays que incluye como métodos
algunas de las tareas que se realizan más a menudo con vectores:

- Arrays.sort(v)ordena los elementos del vector.


- Arrays.equals(v1,v2)comprueba si dos vectores son iguales.
- Arrays.fill(v,val)rellena el vector vcon el valor val.
- Arrays.toString(v)devuelve una cadena que representa el contenido del vector.
- Arrays.binarySearch(v, k)busca el valor kdentro del vector v(que previamente ha de estar ordenado).

You might also like