Hola habrozhiteli! Este libro está destinado a principiantes.
Durante muchos años, el lenguaje Java ha sido uno de los más populares y buscados. Es hermoso, efectivo y, lo más importante, muy productivo. Pero, desafortunadamente, no es la más fácil. Es por eso que la demanda de programadores Java es consistentemente alta. El lenguaje Java es un diamante que adornará el bagaje de conocimiento de cualquier programador. Y aprender Java, como espero, los lectores de este libro tendrán que asegurarse, no solo es útil, sino también interesante. La base del libro son los cursos de conferencias, en diferentes momentos, que leí para los maestros de la Facultad de Física de la Universidad Nacional de Kiev que llevan el nombre Tarasa Shevchenko, licenciada de la facultad de ingeniería médica de la Universidad Técnica Nacional de Ucrania "Instituto Politécnico de Kiev" y estudiantes de varios cursos de programación. El material del libro y la forma de presentación están adaptados para todos los que quieran aprender Java, no solo en las instituciones educativas, sino también de forma independiente. Por lo tanto, el libro se puede usar como tutorial.
Matrices
Una matriz significa un conjunto del mismo tipo de valores (variables), al que se puede acceder mediante un nombre común. Este capítulo está dedicado a las matrices.
Las variables que pertenecen a una matriz se denominan elementos de esta matriz. Para identificar de forma exclusiva un elemento de una matriz, debe conocer el nombre de la matriz y la posición (ubicación) del elemento en la matriz. La posición de los elementos en la matriz se determina utilizando índices enteros. El número de índices necesarios para identificar un elemento de una matriz se denomina dimensión de la matriz. Una matriz unidimensional es una matriz en la que los elementos se identifican usando un índice único.
Matrices unidimensionales
Es conveniente imaginar una matriz unidimensional en forma de cadena ordenada o secuencia de variables (del mismo tipo). Para declarar una matriz unidimensional, debe especificar el tipo al que pertenecen los elementos de la matriz, el nombre de la matriz y también el número de elementos incluidos en la matriz. La sintaxis para declarar una matriz unidimensional es:
[] =new [];
Primero, se indica el tipo de los elementos de la matriz, y después del identificador de tipo, seguido de corchetes vacíos. A continuación, el nombre de la matriz, el operador de asignación, la instrucción (operador) nueva, nuevamente el tipo de los elementos de la matriz y entre corchetes el tamaño de la matriz (el número de elementos en la matriz). Por ejemplo, el comando int nums = new int [20] declara una matriz de números enteros de 20 elementos.
Estrictamente hablando, el comando de declaración de matriz presentado aquí es una simbiosis de dos comandos: el comando int [] nums declara una variable nums del tipo "matriz entera" (variable de matriz) y la nueva instrucción int [20], que, de hecho, crea la matriz. A esta instrucción se le asigna el valor de la variable nums y, como resultado de la referencia de matriz, se escribe en la variable nums. En otras palabras, el proceso de crear una matriz se puede realizar con dos comandos:
int[] nums; nums=new int[20];
Además, estos comandos se pueden publicar en el código del programa, es decir, podemos declarar una variable de matriz y solo entonces, en otro lugar del código, crear una matriz (y escribir un enlace a esta matriz en la variable de matriz).
DETALLES Anteriormente, tratamos principalmente con tipos básicos o primitivos (como int, char o double). Una variable del tipo base almacena el valor. Técnicamente, se ve así: se asigna un espacio para una variable en la memoria, y el valor de la variable se escribe en este lugar. Pero hay otra forma de trabajar con datos en la que una variable se refiere a datos. Esto es lo que les sucede a los objetos, por lo que se implementan matrices. En realidad, hay una matriz, pero no tenemos acceso a ella directamente, sino con la ayuda de un intermediario, que es una variable de matriz. El valor de la variable de matriz no es la matriz, sino la dirección de la matriz. Por lo tanto, crear una variable de matriz no significa crear una matriz. Una matriz se crea por separado. Describiremos esta situación como una en la que una variable de matriz se refiere a una matriz. Cada vez que necesitemos acceder a la matriz, accederemos a la variable de matriz que se refiere a la matriz dada.
Aunque a primera vista dicho esquema puede parecer redundante, sin embargo, tiene sus ventajas. Y veremos esto.
En los casos en que no haya malentendidos, identificaremos la variable de matriz con la matriz.
Al declarar una variable de matriz, se permite indicar corchetes después del identificador de tipo o después del nombre de la matriz. Por ejemplo, en lugar del comando int [] nums, puede usar el comando int nums [].
Se accede a un elemento de una matriz unidimensional a través del nombre de la matriz con el índice del elemento indicado entre corchetes. La indexación de elementos de la matriz comienza desde cero. Por lo tanto, la referencia al primer elemento de la matriz nums se verá como nums [0]. Si hay 20 elementos en la matriz, entonces el último elemento de la matriz tiene un índice de 19, es decir, la instrucción para acceder al elemento parece nums [19].
La longitud de la matriz se puede encontrar utilizando la propiedad de longitud: se indica el nombre de la matriz y, a través del punto, la propiedad de longitud. Por ejemplo, para averiguar la longitud de la matriz nums, puede usar la instrucción nums.length. Entonces la referencia al último elemento de la matriz se puede escribir como nums [nums.length-1].
AVISO Java utiliza una comprobación automática para ver si sale de la matriz. Por lo tanto, si el código se refiere a un elemento de matriz inexistente, se produce un error.
Al declarar una matriz, se le asigna memoria. En Java, los elementos de la matriz se inicializan automáticamente con valores cero: las celdas seleccionadas se ponen a cero y los valores de estas celdas puestas a cero se interpretan según el tipo de matriz. Pero no debe confiar en dicha inicialización automática. Es aconsejable inicializar los elementos de la matriz explícitamente. Para hacer esto, use el operador de bucle o especifique una lista de valores de elementos al declarar una matriz.
Para inicializar la matriz con una lista de valores al declarar una variable de matriz, después de que se indique (a través del operador de asignación) una lista de valores encerrados entre llaves. Por ejemplo:
int[] data={3,8,1,7};
Aquí, los datos variables se declaran para una matriz de enteros, se crea una matriz y se escribe un enlace a esta variable. El tamaño de la matriz y los valores de los elementos se determinan automáticamente de acuerdo con el número de elementos en la lista de valores. En este caso, se crea una matriz entera de cuatro elementos con los valores de los elementos 3, 8, 1 y 7. Se puede lograr el mismo resultado utilizando, por ejemplo, los siguientes comandos:
int[] data; data=new int[]{3,8,1,7};
El primer comando de datos int [] declara una variable de matriz. La instrucción new int [] {3,8,1,7} crea una matriz de cuatro enteros, y se asigna una referencia a esta matriz a los datos variables (lo que significa que el comando data = new int [] {3,8,1,7}) .
En el Listado 3.1 se muestra un ejemplo de declaración, inicialización y uso de matrices.
Listado 3.1. Presentación de matrices unidimensionales
class Demo{ public static void main(String[] args){
El programa declara e inicializa una matriz de datos de cuatro elementos. La longitud de la matriz se calcula mediante la declaración data.length. Este valor se escribe en la variable entera n (comando n = data.length). A continuación, el comando int [] nums = new int [n] declara otra matriz de números enteros. El número de elementos en esta matriz está determinado por el valor de la variable n, por lo tanto, coincide con el tamaño de la matriz de datos. El llenado de la matriz nums se realiza mediante una declaración de bucle. Los valores de los elementos de la matriz nums se calculan en función de los valores de los elementos de la matriz de datos (comando nums [i] = 2 * data [i] -3). Para mostrar los valores de los elementos de la matriz nums, use el comando System.out.println ("nums [" + i + "] =" + nums [i]).
A continuación se muestra cómo se ve el resultado de la ejecución del programa:
El resultado del programa (del Listado 3.1)
nums[0]=3 nums[1]=13 nums[2]=-1 nums[3]=11
Una vez más, observamos que la indexación de los elementos de la matriz comienza desde cero. Por lo tanto, en el operador de bucle, la variable de índice i se inicializa con el valor cero inicial, y el operador de desigualdad estricta se usa en la condición de prueba i <nums.length.
También es importante que al crear la matriz nums, su tamaño se determine utilizando la variable n, cuyo valor se calcula durante la ejecución del programa.
Matrices bidimensionales y multidimensionales
La dimensión de la matriz puede ser mayor que uno. Pero en la práctica, rara vez se utilizan matrices de dimensiones superiores a la segunda. A continuación, veremos formas de declarar, inicializar y usar matrices bidimensionales en las que el acceso a un elemento de una matriz se realiza utilizando dos índices. Si representa una matriz bidimensional como una tabla, el primer índice del elemento determina la fila en la que se encuentra el elemento, y el segundo índice determina la columna en la que se encuentra el elemento.
DETALLES Aunque una matriz bidimensional se representa convenientemente como una tabla, se implementa de una manera completamente diferente. De hecho, una matriz bidimensional en Java es una matriz unidimensional cuyos elementos son variables de matriz. Cada una de esas variables se refiere a una matriz unidimensional. Cuando se usa esta construcción, surge la ilusión de que estamos tratando con una mesa.
Crear matrices bidimensionales es tan simple como crear matrices unidimensionales. Pero al declarar una variable para una matriz bidimensional, se indican dos pares de corchetes vacíos después del identificador de tipo, y las instrucciones para crear una matriz bidimensional, entre corchetes separados, indican el tamaño de cada uno de los índices (el número de filas y columnas en la matriz). La sintaxis para declarar una matriz bidimensional es la siguiente:
[][] =new [][];
Como en el caso de una matriz unidimensional, este comando se puede dividir en dos:
[][] ; =new [][];
El primer comando declara una variable para una matriz bidimensional. El segundo comando crea una matriz bidimensional real con los tamaños especificados, y se asigna una referencia a esta matriz como el valor de la variable de matriz. Por ejemplo, el comando double [] [] data = new double [3] [4] crea una matriz bidimensional con elementos del tipo double. La matriz tiene 3 filas y 4 columnas, y el enlace a la matriz se escribe en la variable de datos. Los mismos comandos darán como resultado el mismo resultado:
double[][] data; data=new double[3][4];
El acceso a los elementos de una matriz bidimensional se realiza en el siguiente formato: el nombre de la matriz se indica, entre corchetes es el primer índice del elemento, en otros corchetes es el segundo índice del elemento de la matriz. La indexación en todas las dimensiones comienza desde cero. Por ejemplo, el enlace de datos [0] [3] es una llamada a un elemento de la matriz de datos con los índices 0 y 3, y es un elemento en la primera fila y la cuarta columna.
Para inicializar una matriz bidimensional, se utilizan operadores de bucle anidados o una lista que consiste en listas de valores. Cada una de estas listas internas define los valores de los elementos de la matriz en una cadena. Los siguientes son ejemplos de inicialización de una matriz bidimensional utilizando una lista:
double[][] data={{0.1,0.2,0.3},{0.4,0.5,0.6}}; int nums[][]={{1,2,3},{4,5}};
El primer comando crea e inicializa una matriz de datos bidimensionales de 2 por 3 (dos filas y tres columnas). El número de filas está determinado por el número de elementos en la lista externa. Hay dos de estos elementos: estas son las listas {0.1,0.2,0.3} y {0.4,0.5,0.6}. Cada una de estas listas tiene tres elementos. De aquí obtenemos una matriz de tamaño 2 por 3. La lista {0.1,0.2,0.3} define los valores de los elementos en la primera línea, la lista {0.4,0.5,0.6} define los valores de los elementos en la segunda línea. Por ejemplo, el elemento data [0] [0] obtiene el valor 0.1, el elemento data [0] [2] obtiene el valor 0.3, el elemento data [1] [0] obtiene el valor 0.4 y el elemento data [1] [2] obtiene el valor 0.6 .
El segundo comando crea una matriz de números enteros, que consta de dos líneas (ya que hay dos elementos dentro de la lista asignada: las listas {1,2,3} y {4,5}). Sin embargo, la primera línea de la matriz creada contiene tres elementos (ya que hay tres valores en la lista {1,2,3}), y la segunda línea de la matriz contiene dos elementos (ya que hay dos valores en la lista {4,5}). En la matriz creada, el elemento nums [0] [0] tiene el valor 1, el elemento nums [0] [1] tiene el valor 2, el elemento nums [0] [2] tiene el valor 3, el elemento nums [1] [0] tiene el valor 4 y el elemento nums [1] [1] es el valor 5.
DETALLES El problema es que la matriz de números en diferentes líneas contiene un número diferente de elementos, no. Técnicamente, todo se implementa más que simplemente. La variable de los números de la matriz bidimensional en realidad se refiere a una matriz unidimensional de dos elementos (el número de filas en la matriz bidimensional). Pero los elementos de esta matriz no son enteros, sino variables que pueden referirse a matrices enteras unidimensionales (en términos relativos, los elementos son del tipo int []). La primera variable se refiere a una matriz unidimensional de tres elementos (1, 2 y 3), y la segunda variable se refiere a una matriz unidimensional de tres elementos (4 y 5). Cuando indexamos (¡con un índice!) La variable nums, tenemos acceso al elemento de la matriz unidimensional referenciada por esta variable. Por ejemplo, nums [0] es el primer elemento y nums [1] es el segundo elemento de la matriz mencionada de las variables de la matriz. Y estos elementos son referencias a matrices. Se pueden indexar. Por lo tanto, supongamos que nums [0] [1] es el segundo elemento en la matriz a la que se refiere el primer elemento nums [0] en la matriz a la que se refiere la variable nums. Entonces todo sucede realmente. E interpretamos la instrucción nums [0] [1] como una apelación a un elemento en la primera fila y en la segunda columna de una matriz bidimensional.
El Listado 3.2 muestra un ejemplo de un programa que crea una matriz bidimensional que se rellena utilizando sentencias de bucle anidado.
Listado 3.2. Crear una matriz bidimensional
class Demo{ public static void main(String[] args){ int i,j,n=3,val=1;
El comando int [] [] nums = new int [n-1] [n] crea una matriz de números enteros con n-1 filas yn columnas. A la variable n se le asigna previamente el valor 3. La matriz se llena utilizando operadores de bucle anidados. El valor del elemento de matriz (para los índices dados i y j) se asigna mediante el comando nums [i] [j] = val ++. Aquí, al elemento nums [i] [j] se le asigna el valor actual de la variable val, e inmediatamente después, el valor de la variable val se incrementa en uno.
AVISO Como resultado de ejecutar la instrucción val ++, el valor de la variable val aumenta en uno. Pero dado que se usa la forma postfix del operador de incremento, el valor de la expresión val ++ es el valor antiguo (antes de aumentar en uno) de la variable val.
Después de calcular el valor del elemento, se muestra en el área de salida. Como resultado del programa, obtenemos:
El resultado del programa (del listado 3.2)
1 2 3 4 5 6
El listado 3.3 muestra el código para un programa que crea una matriz bidimensional con cadenas de diferentes longitudes.
Listado 3.3. Matriz con cuerdas de diferentes longitudes.
class Demo{ public static void main(String[] args){ int i,j,val=1;
El comando int [] [] nums = new int [4] [] crea una matriz de números enteros bidimensionales. Esta matriz consta de cuatro filas. Sin embargo, el tamaño de las líneas no se especifica: el segundo par de corchetes al final del comando está vacío. Más precisamente, todavía no hay líneas. Necesitan ser creados. Las líneas se crean en la declaración de bucle. En esta declaración de bucle, la variable de índice i se ejecuta a través de valores de 0 a nums.length-1, inclusive. El comando nums [i] = new int [i + 1] crea una fila de una matriz bidimensional con índice i. Dicha cadena contiene un elemento i + 1.
DETALLES Técnicamente, todo sucede así: la nueva instrucción int [i + 1] crea una matriz unidimensional (una cadena para una matriz bidimensional) y una referencia a esta matriz se escribe en la variable nums [i]. En este caso, nums [i] puede interpretarse como un enlace a una línea con índice i. El significado de la instrucción nums.length se aclarará si recuerda que, de hecho, una matriz bidimensional es una matriz unidimensional, cuyos elementos se refieren a matrices unidimensionales. En este caso, nums.length proporciona un valor para el número de elementos en la matriz referenciada por la variable nums, es decir, esta es la cantidad de filas en la matriz bidimensional.
Como resultado, obtenemos una matriz bidimensional de tipo triangular: en la primera línea de la matriz hay un elemento, en el segundo, dos elementos, y así sucesivamente, hasta la cuarta línea de la matriz.
La matriz creada se llena con operadores de bucle anidados. La variable de índice i en el operador de bucle externo toma valores de 0 a nums.length-1 y define una fila en la matriz bidimensional de nums. Para la variable de índice j, el límite superior del rango de variación está determinado por la instrucción nums [i] .length, que devuelve el número de elementos en la fila con el índice i (la variable j cambia de 0 a nums [i] .length-1 inclusive).
DETALLES Cabe señalar que nums [i], de hecho, es una variable que se refiere a una matriz unidimensional que forma una cadena con índice i. El número de elementos en esta matriz (cadena) está determinado por la expresión nums [i] .length.
El valor de los elementos de la matriz se asigna mediante el comando nums [i] [j] = val ++. A continuación se muestra cómo se ve el resultado de la ejecución del programa:
El resultado del programa (del listado 3.3)
1 2 3 4 5 6 7 8 9 10
Como se esperaba, obtuvimos una matriz que tiene diferentes números de elementos en diferentes filas.
AVISO Las matrices, cuya dimensión es más de dos, se crean de la misma manera. Al declarar una variable para una matriz multidimensional, los pares de paréntesis vacíos se indican después del identificador de tipo. El número de tales pares está determinado por la dimensión de la matriz. En el comando de creación de matriz, el tamaño de cada índice se indica entre corchetes separados.
»Se puede encontrar más información sobre el libro en el sitio web del editor
» Contenidos
» Extracto
Cupón de 25% de descuento para vendedores ambulantes - Java
Tras el pago de la versión en papel del libro, se envía un libro electrónico por correo electrónico.