Anuncios

Bienvenidos sean a este post, en el post anterior hablamos sobre la base de los arrays pero hoy hablaremos sobre un par de temas mas avanzados sobre los mismos.

Anuncios
Anuncios

Los arrays vistos en el post anterior generalmente se lo denominan arrays unidimensionales, es decir que son de una sola dimension por ende pueden almacenar un solo valor en la sola posicion pero los arrays en realidad son multidimensionales y estos pueden tener todas las dimensiones que necesitemos aunque por lo general mas alla de las dos dimensiones no lo usaran pero pueden necesitar uno tridimensional pero no deben olvidar que pueden tener infinitas dimensiones, para entender el concepto vamos a centrarnos en un array de dos dimensiones, la sintaxis para definirlo es la siguiente:

tipoDato [][] nombreArray = new tipoDato[tamaño][tamaño];

Como pueden darse cuenta agregaremos el conjunto de corchetes por la cantidad de dimensiones que usaremos en nuestro array, en este caso al ser bidimensional solo llevara dos, al momento de crear el objeto usaremos nuevamente dos conjuntos de corchetes y en ambos casos asignaremos el tamaño o las posiciones de cada dimension, tomemos el caso de un array bidimensional lo podriamos comparar como una tabla donde tenemos filas y columnas, en general la primer dimension la podemos considerar como la fila y la segunda dimension como las columnas, entonces nosotros podemos almacenar informacion en las distintas coordenadas.

Anuncios
Anuncios

Otro tema que tenemos en particular para Java es que los arrays no son dinamicos, a diferencia de otros lenguajes, es decir que siempre debemos definir el tamaño de los mismos y este siempre se ajustara a este, si nos quedamos sin informacion y nos sobran posiciones no ocurrira nada pero en cambio si la informacion sobrepasa a la cantidad de posiciones para almacenar puede ocurrir dos cosas: en el mejor de los casos no seguira subiendo informacion y en el peor de los casos nos devolvera una excepcion, tambien solamente podemos usar valores numericos para asignar la posicion de nuestro valor, con esto hemos terminado sobre los arrays para entender mejor el concepto vamos a utilizar el siguiente ejemplo y para ello vamos a crear un nuevo proyecto con las siguientes caracteristicas:

  • Dispositivos: Phone and Tablet
  • Actividad: Empty Activity
  • Nombre: Usuarios
  • Nombre de paquete: org.example.usuarios
  • API Minimo: API 14 (Android 4.0)
Anuncios

En este proyecto almacenaremos unos usuarios y de cada uno tambien almacenaremos no solamente el usuario sino tambien el nombre y el apellido para saber de la identidad del mismo, para comenzar con este proyecto modificaremos a activity_main.xml de la siguiente forma:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/texto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_vertical|center_horizontal" />
</LinearLayout>
Anuncios

Para este ejemplo solamente estableceremos el tipo de layout, LinearLayout, la orientacion (vertical), y la ubicacion de nuestros elementos por medio de gravity, el unico elemento que usaremos es un TextView al cual identificaremos como texto y tambien lo ubicaremos en el centro por medio de gravity, un layout simple despues de esto pasaremos a la clase MainActivity donde usaremos el siguiente codigo:

MainActivity.java

package org.example.usuarios;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private String [][] usuarios;
    private TextView texto;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        usuarios = new String[5][3];
        usuarios [0][0] = "tinchicus";
        usuarios [0][1] = "Martin";
        usuarios [0][2] = "Miranda";
        usuarios [1][0] = "etortore";
        usuarios [1][1] = "Enzo";
        usuarios [1][2] = "Tortore";
        usuarios [2][0] = "mariaiju";
        usuarios [2][1] = "Marta";
        usuarios [2][2] = "Gargaglione";
        usuarios [3][0] = "polizzia";
        usuarios [3][1] = "Ariel";
        usuarios [3][2] = "Polizzi";
        usuarios [4][0] = "marcuzzij";
        usuarios [4][1] = "Javier";
        usuarios [4][2] = "Marcuzi";

        texto = (TextView)findViewById(R.id.texto);

        for(int x=0; x < 5; x++){
            for(int y=0; y < 3; y++){
                texto.setText(texto.getText().toString()
                        + "\t" + usuarios[x][y]);
            }
            texto.setText(texto.getText().toString() + "\n");
        }
    }
}
Anuncios

Lo primero que haremos sera crear un array bidimensional al cual llamaremos usuarios, despues crearemos un objeto de tipo TextView llamado texto, nuestro siguiente paso sera pasar a onCreate y en esta ocasion definiremos el array donde la primera dimension sera de cinco filas y la segunda dimension sera de tres columnas, despues ingresaremos los valores a nuestro array, tomemos el primer caso para explicarlo:

        usuarios [0][0] = "tinchicus";
        usuarios [0][1] = "Martin";
        usuarios [0][2] = "Miranda";
Anuncios

La primera coordenada, es decir la columna cero, sera para almacenar nuestro usuario, en la segunda columna (le asignamos el valor uno a la segunda dimension) almacenaremos el nombre de la persona y en la tercer columna almacenaremos el apellido, observen dos detalles:

  • La primera dimension correspondiente a la fila no varia en los tres datos
  • La segunda columna es la unica que varia para asignar a las distintas columnas
Anuncios

Cuando pasamos al segundo usuario variamos la columna de cero a uno y volvemos a variar las columnas para asignar los mismos datos, y al proximo dato hacemos lo mismo y asi hasta que terminamos de ingresar todos los datos, el siguiente paso es crear el vinculo entre el elemento del layout y nuestro objeto, esto gracias a findViewById por ultimo tendremos este bloque:

Nota: Esta no es la mejor forma pero por un tema de practicidad lo hacemos asi.
        for(int x=0; x < 5; x++){
            for(int y=0; y < 3; y++){
                texto.setText(texto.getText().toString()
                        + "\t" + usuarios[x][y]);
            }
            texto.setText(texto.getText().toString() + "\n");
        }
Anuncios
Anuncios

En este bloque tenemos dos bucles for, el primero contara de 0 a 4, es decir que contara cinco posiciones, el cual usaremos para la primera dimension o las filas, el segundo bucle for contara de 0 a 2, es decir que contara tres valores y este lo usaremos para la segunda dimension de nuestro array o podemos considerar como las columnas, en este bucle setearemos el texto de nuestro TextView por medio de texto, pero como en el ejemplo del post anterior por medio de getText y toString recuperaremos la informacion que posea y le agregaremos un modificador que equivale a un tabulador y luego le agregaremos el valor de usuarios y gracias a los valores de los bucles (x e y respectivamente) podremos acceder a los valores almacenados en usuarios, por ultimo cuando sale del segundo bloque agrega al valor actual de texto un modificador de nueva linea, para obtener el dato volvemos a usar getText y toString, y volvemos a repetir el primer ciclo es decir que cambiamos de fila y volvemos a inspeccionar las columnas con el segundo bucle, si lo compilamos y probamos obtendremos una pantalla similar a esta

Anuncios

Como pueden observar nos trajo primero el usuario, luego el nombre y por ultimo el apellido, y cada linea por cada usuario con sus respectivos datos, este es un uso practico de como podemos aplicar el uso de un array bidimensional, y en este caso con solo variar el numero de la segunda dimension podriamos inclusive almacenar mas informacion del usuario.

Anuncios

Antes de terminar con este post vamos a hacer una ultima modificacion en nuestro proyecto, en donde declaramos nuestro objeto y variable agregaremos el siguiente bloque:

    private final int USUARIO = 0;
    private final int NOMBRE = 1;
    private final int APELLIDO = 2;
Anuncios

En este caso agregamos tres constantes las cuales asignaran nombre a los valores que equivalen a cada campo, es decir si nosotros sabemos que el usuario esta en la columna cero, asi como el nombre esta en la columna uno y el apellido en la columna dos, con esta nuevas constantes podriamos hacer la siguiente modificacion:

        usuarios [0][USUARIO] = "tinchicus";
        usuarios [0][NOMBRE] = "Martin";
        usuarios [0][APELLIDO] = "Miranda";
        usuarios [1][USUARIO] = "etortore";
        usuarios [1][NOMBRE] = "Enzo";
        usuarios [1][APELLIDO] = "Tortore";
        usuarios [2][USUARIO] = "mariaiju";
        usuarios [2][NOMBRE] = "Marta";
        usuarios [2][APELLIDO] = "Gargaglione";
        usuarios [3][USUARIO] = "polizzia";
        usuarios [3][NOMBRE] = "Ariel";
        usuarios [3][APELLIDO] = "Polizzi";
        usuarios [4][USUARIO] = "marcuzzij";
        usuarios [4][NOMBRE] = "Javier";
        usuarios [4][APELLIDO] = "Marcuzi";
Anuncios

En este caso respetamos a la primera dimension porque seria muy confuso reemplazarlo con las constantes pero si en el caso de las columnas donde reemplzamos el valor por la constante que corresponde, si probamos este proyecto deberia seguir funcionando pero lo interesante es que ahora tendremos una identificacion de que dato corresponde.

Anuncios

En resumen, hoy hemos visto unas particularidades mas sobre los arrays, como es la multidimensionalidad, cuales son las mas reales de usar, como se declara y como se define, algunas caracteristicas de los arrays, un ejemplo donde pusimos en practica el uso de una array bidimensional, espero les hay sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00