CodeGym /Cursos Java /Módulo 1. Java Syntax /Matices de trabajar con arreglos

Matices de trabajar con arreglos

Módulo 1. Java Syntax
Nivel 7 , Lección 1
Disponible

1. Arrays en memoria

En los ejemplos anteriores, las ilustraciones eran un poco inexactas.

Al crear matrices (como cuando se crean cadenas), se asignan dos bloques de memoria separados: uno para almacenar la matriz (contenedor) en sí y un segundo bloque para la variable que almacena su dirección . La siguiente imagen representa esta aclaración:

arreglos en memoria

La memoria asignada para la matriz de 10 intelementos y la int[]variable que almacena la dirección de la intmatriz, se muestra en verde.

intA modo de comparación, una variable ordinaria que almacena el valor 199se muestra en azul.

Esto recuerda un poco a almacenar cadenas en la memoria, ¿no crees?

Así es, cuerdas. Y al igual que cuando trabaja con cadenas, puede asignar variables de matriz entre sí:

Código Explicación
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Crear una matriz de 10 intelementos.
Asigne el valor 4a la celda con índice 2.
Asigne el valor 9a la celda con índice 7.
En la bvariable, guarde la dirección almacenada en la avariable.
Ahora ay bapunte al mismo objeto de matriz en la memoria.
En la celda del objeto de matriz con índice 9, escriba la suma de los valores que se almacenan en las celdas 2(que almacena el valor 4) y 7(que almacena el valor 9).

El objeto de matriz permanece justo donde estaba, y las variables ay balmacenan la misma dirección (referencia) al mismo objeto. Mira la imagen:

Arreglos en la memoria 2

2. Más detalles sobre cómo trabajar con arreglos

Puede crear una matriz de elementos de absolutamente cualquier tipo. Para hacer esto, simplemente escriba corchetes después del nombre del tipo. En general, la creación de una matriz se ve así:

type[] name = new type[number];

Donde tipo es el tipo de los elementos que almacenaremos en la matriz. Nombre es el nombre de la variable que usaremos para referirnos a la matriz, y número es el número de celdas en la matriz.

El ejemplo anterior es la forma canónica para crear una variable de matriz y un objeto de matriz. En realidad, estas son dos entidades separadas.

Puede crear una variable de matriz por separado de un objeto de matriz:

type[] name;
name = new type[number];

Y un punto más que no es menor:

Puede utilizar variables o incluso expresiones completas como matriz de índice y número de elementos de la matriz .

Ejemplos:

Código Explicación
int n = 100;
int[] a = new int[n];
Crear una matriz de nelementos.
int n = 100;
int[] a = new int[n * 2 + 3];
Crear una matriz con 203elementos
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Importante:
Por cierto, debe tener en cuenta que si intenta acceder a una celda de matriz utilizando un índice que no existe para la matriz (en nuestro ejemplo, eso significa cualquier número entero que no esté en el rango), el programa se bloqueará con 0..99un ArrayIndexOfBoundException, lo que significa que el índice estaba fuera de los límites de la matriz.

3. Longitud de la matriz

Como vio en el ejemplo anterior, puede crear una variable de matriz por sí misma y luego asignarle un valor (una referencia a un objeto de matriz) en algún lugar del código. Incluso puedes hacer esto:

Código Explicación
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Cree una variable de matriz cuyo tipo sea int[]
Si la avariable es menor que 10,
cree una matriz de 10elementos.
De lo contrario,
cree una matriz de 20elementos.

Y ahora, ¿qué más puedes hacer con tal matriz? ¿Cómo sabes cuántos elementos hay en él?

Para ayudar con esto, los arreglos tienen una propiedad especial (variable) llamada length. Puedes encontrar la longitud de una matriz usando esta expresión:

array.length;

Aquí arrayestá el nombre de la variable de matriz y lengthes el nombre de la propiedad de la matriz. El valor de la lengthpropiedad no se puede cambiar: la lengthpropiedad en sí se puede asignar a otras variables, pero no se le puede asignar nada (si intenta hacer esto, el programa simplemente no compilará).

Podemos continuar con el ejemplo anterior así:

Código Explicación
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
} 
Cree una variable de matriz cuyo tipo sea int[]
Si la avariable es menor que 10,
cree una matriz de 10elementos.
De lo contrario,
cree una matriz de 20elementos
Haga un bucle sobre todos los elementos de la matriz: de 0a longitudarray.length - 1

4. Resumen de hechos sobre arreglos en Java

Recapitulemos lo que sabemos sobre las matrices:

Hecho 1. Una matriz consta de muchas celdas.

Dato 2. Accedes a una celda específica usando su número (índice).

Hecho 3. Todas las células son del mismo tipo.

Hecho 4. El valor inicial de todas las celdas es 0 (si las celdas almacenan números), null(si las celdas almacenan referencias a objetos) o false(si las celdas almacenan booleanvalores). Aprenderá más sobre los valores predeterminados en este capítulo .

El hecho 5. String[] list es solo la declaración de una variable. Esto no crea el contenedor (objeto de matriz) en sí mismo. Para usar la variable, primero debe crear una matriz (contenedor) y asignarla a la variable. Vea el ejemplo a continuación.

Hecho 6. Cuando creamos un objeto de matriz (contenedor), debemos indicar qué tan grande es, es decir, cuántas celdas contiene. Esto se hace con una declaración como: new TypeName[n];

Hecho 7. La longitud de una matriz se puede encontrar usando la .lengthpropiedad.

Dato 8. Después de crear una matriz, no puede cambiar el tipo de sus elementos o la cantidad de elementos que almacena.

Código Explicación
String s;
String[] list;
ses null
listesnull
list = new String[10];
int n = list.length;
La listvariable almacena una referencia a un objeto: una matriz de cadenas que consta de 10elementos.
nes10
list = new String[0];

Ahora listse refiere a una matriz de 0elementos. La matriz existe, pero no puede almacenar ningún elemento.

list = null;
System.out.println(list[1]);
Se lanzará una excepción (error de programa), es decir, el programa fallará. listalmacena una referencia anull
list = new String[10];
System.out.println(list[10]);
Se generará una excepción de matriz fuera de los límites (error de programa).
Si listalmacena 10elementos/celdas, los índices válidos son: 0 1 2 3 4 5 6 7 8 910elementos.

Comentarios (9)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
tokenizer Nivel 16
14 noviembre 2024
la posible respuesta a que no cumple con la condicion 4 puede ser debido a que se tiene que inizializar el resultArray de esta manera resultArray = new int[firstArray.length + secondArray.length];
Nataly Nivel 10, Tlalnepantla
13 noviembre 2024
En teoria se supone que miden lo mismo los dos arreglos y por el hecho de no considerar el primero, me tomaba invalida la tarea, después de hrs decidi cambiar la variable y pudo ejecutarse
2 septiembre 2024
La solución no es aceptada si usa condicionales.
esilva Nivel 10, montevideo, Uruguay
8 agosto 2024
Lo resolví de una forma distinta a la de la solucion, hacía prácticamente lo mismo y no me la tomó como buena por alguna extraña razón, pero bueno... lo hicimos.
VICTOR POLO ANTON Nivel 7, Bilbao , Spain
27 junio 2024
Dificilísimo para mí. He recorrido desde 0 de programación hasta aquí CodeGym y me es imposible entender la lógica por mucha teoría de cómo se escribe una matriz o como se llama al objeto, se necesita más información para sacar este ejercicio. Si estás como yo en este punto, no te frustres.
Oscar Granados Nivel 9, Barranquilla, Colombia
31 enero 2024
Buenos dias, Pregunta: ¿la matriz resultado debe ser = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}? Me está apareciendo error de VALIDACIÓN en " Implemente el método main (String[]), de acuerdo con las condiciones de la tarea." ... PERO no entiendo a qué se refiere. Alguien me puede ayudar?
Dario Kupec Nivel 16, Mayaguez, Puerto Rico Expert
3 febrero 2024
Hola Oscar, si, esa deberia ser la matriz rersultante. Yo implemente una solucion similar pero usando un ciclo for con un if y no me la tomo como valida a pesar de que obtengo el mismo output. Cuando le doy validar me dice que falla justo en ese punto que mencionas y no te explica el porque...
Anonymous #11475920 Nivel 36, Bucharest, Spain
8 marzo 2024
No lo toma como valido porque estas recorriendo el for con valor fijo, si cambias las longitudes utilizando array.length te lo validara. El problema es que al parecer se prueban con otras cadenas con otras dimenciones.
Jorge Nivel 19
18 mayo 2024
tuve el mismo problema con error en el mismo punto, hasta recorrí los bucles for con sus respectivos array.length y cuando declaré la dimensión de la matriz resultArray en función de la suma de los otros arreglos recién me lo aceptó.