[Música] Hola de nuevo, para continuar trabajando revisaremos el tema de arreglos en dos dimensiones. Para esto iniciemos revisando un nuevo problema que se ha presentado en la pizzería. Nos han solicitado poder manejar la información relacionada con las mesas dentro de la pizzería, para esto cada mesa tiene una cantidad de personas sentadas un tiempo de espera promedio. Adicionalmente nos han indicado que las mesas se encuentran organizadas en una cuadrícula y que tanto los meseros como los cocineros se refieren a las mesas en función de su ubicación dentro del espacio, es decir sus coordenadas XY. Vemos cómo podríamos resolver este problema con lo que sabemos hacer hasta ahora. Para modelar esto en la clase pizzería podemos iniciar indicando que hay 12 mesas con una constante y posteriormente crear un arreglo de mesas. Sin embargo ¿cómo podríamos referirnos a las mesas según su posición en el espacio? Una posible opción es crear un atributo adicional dentro de la mesa, sin embargo esta solución no es tan buena, una mejor opción es usar arreglos en dos dimensiones. Al igual que los arreglos en una dimensión, son colecciones de objetos. Sin embargo en esta ocasión los objetos están organizados en dos dimensiones, es decir, son matrices. Esos arreglos funcionan al igual que los arreglos de una dimensión, sólo que ahora para referirnos a los objetos dentro de ellos usaremos una coordenada XY en vez de una posición en la lista. Veamos cómo se declaran esos arreglos de dos dimensiones en Java; primero iniciaremos definiendo una visibilidad la cual como siempre es opcional dependiendo si es un atributo o una variable lo que estamos declarando. A continuación, indicaremos el tipo de dato que almacena el arreglo. Para indicar que es un arreglo de dos dimensiones, usaremos dos pares de paréntesis cuadrados y finalmente indicaremos el nombre del arreglo. Veamos cómo podemos usar esto dentro de la clase pizzería. Recordemos que la pizzería tiene un arreglo de dos dimensiones de mesas, entonces agregaremos un atributo dentro de la clase pizzería que modele esta relación. La visibilidad será privada, por ser un atributo. El tipo de datos de las cosas que almacena será mesa, para indicar que es un arreglo de dos dimensiones colocaremos dos pares de paréntesis cuadrados Y pondremos un nombre al arreglo por ejemplo mesas. Ahora veamos cómo se inicializan esos arreglos. Para esto debemos indicar el nombre del arreglo vemos que es igual a algo nuevo entonces pondremos la palabra [Inglés] new, indicaremos el tipo de datos de los elementos que guarda el arreglo y finalmente entre los paréntesis cuadrados indicaremos las filas y las columnas que tiene la matriz que queremos crear. Volvamos a nuestro ejemplo de la pizzería. En este caso ya tenemos nuestro arreglo de dos dimensiones de mesas ahora agregaremos dos constantes para indicar cuántas filas hay de mesas y cuántas columnas hay. Según el ejemplo habían tres filas de mesas y cuatro columnas, ahora vamos al método constructor e inicialicemos el arreglo. Para eso entonces diremos que mesas es igual a algo nuevo que guarda cosas de tipo mesa que tienen las dimensiones de filas por columnas. Ahora, ¿cómo haremos para referirnos a un objeto dentro de un arreglo? lo haremos igual que lo hacíamos con arreglos de una dimensión, sólo que ahora debemos indicar la posición fila y columna en vez de sólo una posición, dado que en los arreglos de una dimensión la relación era lineal. Por ejemplo, para referirnos a la mesa que está seleccionada diremos que se encuentra en la coordenada uno dos. Sabiendo esto ¿cómo podemos agregar un objeto en un arreglo de dos dimensiones? para hacerlo en Java lo que debemos hacer es indicar el nombre del arreglo, la posición fila columna donde queremos agregar el objeto e igualar esto al objeto que queremos agregar. Veámoslo en nuestro ejemplo. Al igual que con los arreglos de una dimensión, inicializar un arreglo de dos dimensiones todos los espacios se encuentran llenos de [Inglés] null, es decir no hay nada allí. Es nuestra responsabilidad llenar los espacios con objetos. Recordemos lo que ya habíamos construido que era nuestro arreglo de mesas, nuestras constantes que indicaban las dimensiones de la matriz y en el constructor habíamos inicializado el arreglo. Ahora tratemos de meter un objeto dentro de este arreglo. Entonces diremos que en el arreglo mesas, en la posición cero cero, por ejemplo, agregaremos una nueva mesa. Esto hará que la posición cero cero se reemplace el [Inglés] null por una nueva mesa. [Pausa] Ahora veamos cómo podemos consultar los objetos de un arreglo en dos dimensiones. Lo haremos de manera similar a como lo hacíamos con\ os arreglos de una dimensión, solo que ahora indicaremos el nombre del arreglo e indicaremos tanto la fila como la columna donde se encuentra el objeto que queremos consultar. Por ejemplo, digamos que queremos consultar cuántos clientes hay en la pizzería. Para esto debemos consultar cuántas personas hay sentadas en la mesa cero cero, cuántas hay sentadas en la mesa cero uno y así sucesivamente hasta llegar a la última mesa que es la de la posición dos tres. recorriendo todas las mesas, recorriendo todas las mesas, Como en este caso estamos estamos haciendo un recorrido total. Veamos cómo se vería esto en código. Nuevamente dentro de la clase pizzería, y esta vez construiremos el método "contar clientes" Al principio tendremos una variable que tiene cero clientes porque aún no los hemos contado y este valor lo devolveremos al final. Como es un recorrido total traeremos el patrón de recorrido total que hemos usado en las sesiones previas, el cual inicia en cero y parará cuando se acaben las filas, sin embargo, como nuestro arreglo tiene dos dimensiones necesitamos un segundo recorrido el cual recorra las columnas. Para poder consultar la mesa de la posición, consultamos la mesa de las coordenadas i, j, le preguntamos cuántos clientes tiene sentados en este momento. Veamos cómo hemos consultado la mesa, tenemos dos recorridos, uno que va recorriendo las filas y otro que va recorriendo las columnas y estos nos sirven para definir las coordenadas que estamos revisando en este momento. Adicionalmente, aunque es un recorrido total, hemos agregado una segunda instrucción [Inglés] for, dado que tenemos dos dimensiones por revisar. Veamos una segunda consulta, queremos saber si existe una mesa vacía. Para esto, iniciaremos revisando la mesa de la posición cero cero, dado que allí hay sentadas cinco personas, pasaremos a la mesa de la posición cero uno, dado que allí hay sentadas tres personas, pasaremos a la mesa de la posición cero dos. Así continuaremos revisando toda la primera fila y dado que no hay espacio pasaremos a la fila uno, allí revisaremos la mesa de la posición uno cero que también está ocupada y posteriormente llegaremos a la mesa de la posición uno uno, esa se encuentra vacía. Dado que ya hemos encontrado una vacía, podemos detenernos. Al igual que los arreglos de una dimensión, cuando recorremos sólo una parte de los elementos estamos realizando un recorrido parcial. Veamos cómo podemos pasar este recorrido a código. Nuevamente dentro de la clase pizzería, ahora construiremos el método "hay vacía". iniciemos poniendo el peor caso, es decir, que no hay mesas vacías y devolveremos este valor al terminar el método. Como debemos recorrer, traeremos una instrucción [Inglés] for que inicia en la primera mesa, que termina cuando se hayan acabado las filas y adicionalmente termina cuando hayamos encontrado una mesa que no esté vacía. Lo mismo haremos para las columnas, recordemos que debemos tener dos instrucciones [Inglés] for, o dos instrucciones [Inglés] while porque estamos haciendo un recorrido en dos dimensiones. Y también pararemos cuando hayamos encontrado la mesa que esté vacía. Consultaremos la mesa de la posición i, j, y ella le preguntaremos si está vacía, es decir, si tiene cero clientes sentados y si es así, hemosencontrado una mesa vacía y nos podemos detener. Adicionalmente a estos recorridos, en arreglos de dos dimensiones podemos hacer otros tipos de recorridos. Por ejemplo, podemos recorrer los elementos de la diagonal, de las dos diagonales, podemos recorrer en escalera, podemos recorrer los vecinos de un elemento o, por ejemplo, podemos recorrer los vecinos en cruz de un elemento. Con esto hemos terminado el tema de arreglos en dos dimensiones. En la próxima sesión revisaremos un caso de estudio donde aplicaremos esos conceptos. [Música]