Programación

1º DAM/DAW - Curso 2024-2025

User Tools

Site Tools


apuntes:arrays

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:arrays [2019/02/14 22:12] Santiago Faciapuntes:arrays [2022/10/09 16:45] (current) – [Bucle for mejorado] Santiago Faci
Line 1: Line 1:
 ====== Los arrays ====== ====== Los arrays ======
  
-\part*{Los Arrays}+===== Arrays unidimensionales =====
  
-\section{Arrays unidimensionales} +Un array es una estructura de datos que permite almacenar un número indeterminado de variables del mismo tipo, que son referenciadas por el mismo identificador.
- +
-Un array es una estructura de datos que permite almacenar un número indeterminado de variables del mismo tipo, que son referenciadas por el +
-mismo identificador.+
  
 Dentro del array, cada valor ocupa una posición y se puede recuperar o modificar su valor combinando el identificador y dicha posición. Dentro del array, cada valor ocupa una posición y se puede recuperar o modificar su valor combinando el identificador y dicha posición.
  
-\begin{figure}[h!] +<figure> 
-    \centering +{array.png }
-    \includegraphics[scale=0.7]{partes/varios/array.png} +<caption>Array (fuente:geeksforgeeks.org)</caption></figure>
-    \caption{Array (Fuente: geeksforgeeks.org)+
-    \label{Plataforma Java} +
-\end{figure}+
  
-Como se puede observar en la figura, la primera posición del array es la posición 0. Como consecuencia, la última posición del array será +Como se puede observar en la figura, la primera posición del array es la posición 0. Como consecuencia, la última posición del array será igual a la longitud del mismo menos uno.
-igual a la longitud del mismo menos uno.+
  
-\section{Declaración del array}+==== Declaración del array ====
  
-El array se declara como una variable, indicando tipo e identificador, acompañado de los caracteres \verb [  y \verb ]  que lo caracterizan, +El array se declara como una variable, indicando tipo e identificador, acompañado de los caracteres ''[''  y \verb '']'' que lo caracterizan, puesto que son los caracteres que se emplean para referirse a alguna posición del mismo.
-puesto que son los caracteres que se emplean para referirse a alguna posición del mismo.+
  
-Una vez declarado puede ser instanciado con la instrucción \verb new  seguido del tipo e indicando el número de elementos para los que se +Una vez declarado puede ser instanciado con la instrucción \verb new  seguido del tipo e indicando el número de elementos para los que se quiere reservar espacio en memoria, tal y como se indica a  
-quiere reservar espacio en memoria, tal y como se indica a continuación. En este caso, para asignar valor a cada uno de los espacios que se +continuación. En este caso, para asignar valor a cada uno de los espacios que se han reservado se puede acceder al array e indicar la posición para la que se quiere asignar 
-han reservado se puede acceder al array e indicar la posición para la que se quiere asignar +
  
-\begin{lstlisting}[language=java]+<code java>
 String[] telefonos = new String[5]; String[] telefonos = new String[5];
 telefonos[0] = "976123456"; telefonos[0] = "976123456";
-. . . +</code>
-\end{lstlisting}+
  
-También es posible inicializar los valores de un array aprovechando una estructura de bucle como \verb for  de forma que se puede asignar a +También es posible inicializar los valores de un array aprovechando una estructura de bucle como ''for''  de forma que se puede asignar a cada elemento del mismo, posición por posición.
-cada elemento del mismo, posición por posición.+
  
-\begin{lstlisting}[language=java]+<code java>
 String[] telefonos = new String[5]; String[] telefonos = new String[5];
 for (int i = 0; i < telefonos.length; i++) { for (int i = 0; i < telefonos.length; i++) {
     telefonos[i] = " . . . ";     telefonos[i] = " . . . ";
 } }
-\end{lstlisting}+</code>
  
-También es posible crear un array asignando directamente los valores que queremos que contenga el mismo. En ese caso se declara un array con +También es posible crear un array asignando directamente los valores que queremos que contenga el mismo. En ese caso se declara un array con la capacidad justa para almacenar todos los valores especificados.
-la capacidad justa para almacenar todos los valores especificados.+
  
-\begin{lstlisting}[language=java]+<code java>
 String[] telefonos = {"976123456", "91123456", "986789876"} String[] telefonos = {"976123456", "91123456", "986789876"}
-\end{lstlisting}+</code>
  
-Hay que tener en cuenta que pueden crear arrays de tipos primitivos y clases Java, y también de cualquier clase de las que hayas programado +Hay que tener en cuenta que pueden crear arrays de tipos primitivos y clases Java, y también de cualquier clase de las que hayas programado en el proyecto. En ese caso, se crea una estructura que almacena las referencias a todos los objetos que se creen en cada una de ellas.
-en el proyecto. En ese caso, se crea una estructura que almacena las referencias a todos los objetos que se creen en cada una de ellas.+
  
-\begin{lstlisting}[language=java]+<code java>
 Moto[] misMotos = new Moto[10]; Moto[] misMotos = new Moto[10];
-. . . +</code>
-\end{lstlisting}+
  
-En cualquier caso, un array es una referencia a la estructura donde se almacenan sus valores (o sus referencias, si es un array de objetos), +En cualquier caso, un array es una referencia a la estructura donde se almacenan sus valores (o sus referencias, si es un array de objetos), por lo que si se pasa como parámetro a un método, se pasará como referencia.
-por lo que si se pasa como parámetro a un método, se pasará como referencia.+
  
-\begin{figure}[h!] +<figure> 
-    \centering +{array1.jpg }
-    \includegraphics[scale=0.7]{partes/varios/array1.jpg} +<caption>Array unidimensional (fuente:geeksforgeeks.org)</caption></figure>
-    \caption{Array unidimensional (Fuente: geeksforgeeks.org)+
-    \label{Plataforma Java} +
-\end{figure}+
  
-\section{Utilización del array}+==== Utilización del array ====
  
-La utilización del array es muy sencilla. Cada elemento del mismo, una vez indicada la posición, se puede tratar como una variable del mismo +La utilización del array es muy sencilla. Cada elemento del mismo, una vez indicada la posición, se puede tratar como una variable del mismo tipo que el array, por lo que las operaciones que se pueden hacer con cada elemento son las mismas que se pueden hacer sobre variables individuales.
-tipo que el array, por lo que las operaciones que se pueden hacer con cada elemento son las mismas que se pueden hacer sobre variables +
-individuales.+
  
-\begin{lstlisting}[language=java]+<code java>
 Moto[] misMotos = new Moto[10]; Moto[] misMotos = new Moto[10];
 // Poblar el array . . . // Poblar el array . . .
Line 83: Line 63:
     misMotos[i].pasarRevision();    // podemos invocar al método de cada elemento del array     misMotos[i].pasarRevision();    // podemos invocar al método de cada elemento del array
 } }
-\end{lstlisting}+</code>
  
-También se puede declarar una variable para tomar la referencia del emento del array. A veces es más cómodo para acceder a los métodos del +También se puede declarar una variable para tomar la referencia del emento del array. A veces es más cómodo para acceder a los métodos del objeto.
-objeto.+
  
-\begin{lstlisting}[language=java]+<code java>
 Moto[] misMotos = new Moto[10]; Moto[] misMotos = new Moto[10];
 // Poblar el array . . . // Poblar el array . . .
Line 98: Line 77:
     }     }
 } }
-\end{lstlisting}+</code>
  
 Los arrays se pueden pasar como parámetro a un método, y lo harán por referencia: Los arrays se pueden pasar como parámetro a un método, y lo harán por referencia:
  
-\begin{lstlisting}[language=java+<code java>
-. . .+
 int[] numeros = new int[5]; int[] numeros = new int[5];
 for (int i = 0; i < numeros.length; i++) { for (int i = 0; i < numeros.length; i++) {
Line 117: Line 95:
     }     }
 } }
-\end{lstlisting}+</code>
  
-\section{Arrays bidimensionales}+===== Arrays bidimensionales =====
  
-Los arrays bidimensionales, también llamados matrices, son arrays en dos dimensiones. En la práctica se puede interpretar como un array +Los arrays bidimensionales, también llamados matrices, son arrays en dos dimensiones. En la práctica se puede interpretar como un array unidimensional en el que hay almacenado otro array en cada elemento del primero.
-unidimensional en el que hay almacenado otro array en cada elemento del primero.+
  
-\begin{figure}[h!] +<figure> 
-    \centering +{array2.jpg }
-    \includegraphics[scale=0.7]{partes/varios/array2.jpg} +<caption>Array bidimensional (fuente:geeksforgeeks.org)</caption></figure>
-    \caption{Array bidimensional (Fuente: geeksforgeeks.org)+
-    \label{Plataforma Java} +
-\end{figure}+
  
-Se declaran e inicializan de la misma manera que los arrays unidimensionales, pero esta vez hay que tratar con dos dimensiones. Al poderse +Se declaran e inicializan de la misma manera que los arrays unidimensionales, pero esta vez hay que tratar con dos dimensiones. Al poderse interpretar como una matriz, la primera dimensión hará referencia a las filas, y la segunda a las columnas
-interpretar como una matriz, la primera dimensión hará referencia a las filas, y la segunda a las columnas+
  
-\begin{lstlisting}[language=java]+<code java>
 String[][] telefonos = new String[5][6]; String[][] telefonos = new String[5][6];
 telefonos[0][0] = "976123456"; telefonos[0][0] = "976123456";
-. . . +</code>
-\end{lstlisting}+
  
-También es posible inicializar los valores de un array aprovechando una estructura de bucle como \verb for  de forma que se puede asignar a +También es posible inicializar los valores de un array aprovechando una estructura de bucle como ''for''  de forma que se puede asignar a cada elemento del mismo, posición por posición. En este caso será necesario anidar dos bucles para acceder a las dos dimensiones del array.
-cada elemento del mismo, posición por posición. En este caso será necesario anidar dos bucles para acceder a las dos dimensiones del array.+
  
-\begin{lstlisting}[language=java]+<code java>
 String[][] telefonos = new String[5][6]; String[][] telefonos = new String[5][6];
 for (int i = 0; i < telefonos.length; i++) { for (int i = 0; i < telefonos.length; i++) {
Line 150: Line 121:
     }     }
 } }
-\end{lstlisting}+</code>
  
-También es posible crear un array bidimensional asignando directamente los valores que queremos que contenga el mismo. En ese caso se declara un array con +También es posible crear un array bidimensional asignando directamente los valores que queremos que contenga el mismo. En ese caso se declara un array con la capacidad justa para almacenar todos los valores especificados.
-la capacidad justa para almacenar todos los valores especificados.+
  
-\begin{lstlisting}[language=java]+<code java>
 String[] telefonos = {{"976123456", "91123456", "986789876"}, { . . .}, . . . } String[] telefonos = {{"976123456", "91123456", "986789876"}, { . . .}, . . . }
-\end{lstlisting}+</code>
  
 Y, por supuesto, también podemos crear arrays bidimensionales de objetos: Y, por supuesto, también podemos crear arrays bidimensionales de objetos:
  
-\begin{lstlisting}[language=java]+<code java>
 Moto[][] misMotos = new Moto[10][2]; Moto[][] misMotos = new Moto[10][2];
-. . . +</code>
-\end{lstlisting}+
  
-\section{Manipulaciones habituales con arrays}+===== Manipulaciones habituales con arrays =====
  
 En Java disponemos de la clase \verb Arrays  que facilita algunas de las operaciones más comunes que se pueden llevar a cabo con los arrays: En Java disponemos de la clase \verb Arrays  que facilita algunas de las operaciones más comunes que se pueden llevar a cabo con los arrays:
  
-\begin{itemize} +  * ''Arrays.binarySearch()'' Busca en un array un elemento que se pasa como parámetro. Devolverá la posición donde lo encuentra o el valor ''-1''  si no existe. Hay que tener en cuenta que el array deberá de estar ordenado.
-    \item \verb Arrays.binarySearch()  Busca en un array un elemento que se pasa como parámetro. Devolverá la posición donde lo encuentra o +
-    el valor \verb -1  si no existe. Hay que tener en cuenta que el array deberá de estar ordenado.+
  
-    \begin{lstlisting}[language=java] +<code java> 
-    int[] numeros = new int[10]; +int[] numeros = new int[10]; 
-    for (int i = 0; i < numeros.length; i++) { +for (int i = 0; i < numeros.length; i++) { 
-        numeros[i] = i * 10; +    numeros[i] = i * 10; 
-    +
-    int resultado = Arrays.binarySearch(numeros, 20); +int resultado = Arrays.binarySearch(numeros, 20); 
-    System.out.println(resultado);  // 2 +System.out.println(resultado);  // 2 
-    \end{lstlisting}+</code>
  
-    \item \verb Arrays.copyOf()  Permite copiar el array a otro de diferente longitud (mayor o menor), rellenando o truncando los valores +  * ''Arrays.copyOf()'' Permite copiar el array a otro de diferente longitud (mayor o menor), rellenando o truncando los valores nuevos o eliminados, respectivamente. Devuelve el array resultante
-    nuevos o eliminados, respectivamente. Devuelve el array resultante+
          
-    \begin{lstlisting}[language=java] +<code java> 
-    int[] numeros = new int[5];+int[] numeros = new int[5]; 
 +   
 +int[] masNumeros = Arrays.copyOf(numeros, 10); 
 +System.out.println(masNumeros.length);  // 10 
 +</code> 
 + 
 +  * ''Arrays.equals()'' Comprueba si dos arrays son iguales. Devuelve un valor booleano indicando si son o no iguales
          
-    int[] masNumeros = Arrays.copyOf(numeros, 10)+<code java> 
-    System.out.println(masNumeros.length);  // 10 +int[] numeros = {13, 4}
-    \end{lstlisting}+int[] otrosNumeros = {1, 3, 4};
          
-    \item \verb Arrays.equals()  Comprueba si dos arrays son igualesDevuelve un valor booleano indicando si son o no iguales+System.out.println(Arrrays.equals(numeros, otrosNumeros)); // true 
 +</code> 
 + 
 +  * ''Arrays.fill()'' Rellena un array con el valor que se le pasa como parámetro
          
-    \begin{lstlisting}[language=java] +<code java> 
-    int[] numeros = {1, 3, 4}; +int[] numeros = new int[3];
-    int[] otrosNumeros = {1, 3, 4}; +
-     +
-    System.out.println(Arrrays.equals(numeros, otrosNumeros)); // true +
-    \end{lstlisting} +
-     +
-    \item \verb Arrays.fill()  Rellena un array con el valor que se le pasa como parámetro +
-     +
-    \begin{lstlisting}[language=java] +
-    int[] numeros = new int[3]; +
- +
-    Arrays.fill(numeros, 5); +
-    System.out.println(Arrays.toString(numeros));   // [5, 5, 5] +
-    \end{lstlisting}+
  
-    \item \verb Arrays.sort()  Ordena el array que se pasa como parámetro+Arrays.fill(numeros, 5)
 +System.out.println(Arrays.toString(numeros));   // [5, 5, 5] 
 +</code>
  
-    \begin{lstlisting}[language=java] +  * ''Arrays.sort()'' Ordena el array que se pasa como parámetro
-    int[] numeros = {4, 10, 3, 6} +
-    Arrays.sort(numeros)+
-    System.out.println(Arrays.toString(numeros));   // [3, 4, 6, 10] +
-    \end{lstlisting}+
  
-    \item \verb Arrays.toString()  Devuelve una representación en \verb String  del array que se pasa como parámetro+<code java> 
 +int[] numeros = {4, 10, 3, 6} 
 +Arrays.sort(numeros); 
 +System.out.println(Arrays.toString(numeros));   // [3, 4, 6, 10] 
 +</code>
  
-    \begin{lstlisting}[language=java] +  * ''Arrays.toString()'' Devuelve una representación en ''String'' del array que se pasa como parámetro
-    int[] numeros = {10, 20, 30, 5} +
-    System.out.println(Arrays.toString(numeros));   // [10, 20, 30, 5] +
-    \end{lstlisting}+
  
-\end{itemize}+<code java> 
 +int[] numeros = {10, 20, 30, 5} 
 +System.out.println(Arrays.toString(numeros));   // [10, 20, 30, 5] 
 +</code>
  
-\section{Bucle for mejorado}+===== Bucle for mejorado =====
  
-En Java, existe lo que se conoce como bucle \emph{for each}. Es un tipo de bucle mejorado para el caso en que se quiera recorrer un array y +En Java, existe lo que se conoce como bucle //for-each//. Es un tipo de bucle mejorado para el caso en que se quiera recorrer un array y acceder a cada uno de los elementos del mismo. Por eso, no es necesario utilizar variable auxiliar para el índice ni asignar cada elemento del array para trabajar sobre él, lo hará automáticamente la propia estructura del bucle:
-acceder a cada uno de los elementos del mismo. Por eso, no es necesario utilizar variable auxiliar para el índice ni asignar cada elemento +
-del array para trabajar sobre él, lo hará automáticamente la propia estructura del bucle:+
  
-\begin{lstlisting}[language=java]+<code java>
 Moto[] motos = new Moto[10]; Moto[] motos = new Moto[10];
 . . . . . .
Line 241: Line 203:
     moto.viajar("Zaragoza", "Madrid");     moto.viajar("Zaragoza", "Madrid");
 } }
-\end{lstlisting}+</code>
  
-Y además, en el caso de que exista alguna excepción, siempre puede romperse el bucle (con \verb break ) o saltarse alguna iteración (con +Y además, en el caso de que exista alguna excepción, siempre puede romperse el bucle (con ''break'') o saltarse alguna iteración (con ''continue''.
-\verb continue ).+
  
-\begin{lstlisting}[language=java]+<code java>
 Moto[] motos = new Moto[10]; Moto[] motos = new Moto[10];
 . . . . . .
Line 259: Line 220:
     . . .     . . .
 } }
-\end{lstlisting} +</code>
  
 ---- ----
  
-(c) 2019 Santiago Faci+ 
 +(c) 2019-{{date>%Y}} Santiago Faci
apuntes/arrays.1550182329.txt.gz · Last modified: 2019/02/14 22:12 by Santiago Faci