Curso Java. Volumen XIII: Arrays multidimensionales

Escrito por Adrián Crespo
Java

En el volumen anterior explicamos la utilización de un array como parámetro en las funciones.

Se propuso también la realización de un ejercicio en el que se decía hacer un array que se le pasaba como parámetro un string con el nombre que querías buscar. El método debía retornar true o false dependiendo de si el resultado era satisfactorio o no.

En esta entrega, os daremos la solución al ejercicio planteado y también os hablaremos sobre los Arrays multimensionales ( por ejemplo, las matrices) y de como se recorre y se trabaja con ellos.

En primer lugar, la solución al ejercicio:

Arrays multidimensionales

Los arrays multidimensionales son arrays de arrays, con algunas facilidades para hacer mas simple su uso.

  • Declaración y creación

int matrizA[][] = new int[4][5];

El índice izquierdo representa la fila, y el derecho la columna

Los elementos se usan de la manera

matrizA[2][3]

Aunque los tamaños de cada fila pueden ser distintos, no es aconsejable (es fácil equivocarse).

Tablas y listas de tamaño variable.

  •  Se puede guardar una tabla de tamaño variable (pero limitado)
  •  Basta usar sólo la primera parte del array, dejando el resto sin usar
  •  Hay que llevar cuenta del número de casillas útiles. Existe una clase en Java que representa tablas de tamaño variable, cuyo tamaño puede crecer
  •  Es la clase ArrayList, está en el paquete java.util
  •  Sólo se pueden almacenar objetos (Coches, personas, Bancos, Jugadores…..).

-Uso de la clase ArrayList

Declaración y creación de una tabla cuyos elementos son objetos de la clasePersona

ArrayList <Persona> v= new ArrayList <Persona> ();

A continuación, los métodos que nos van a facilitar el manejo de los ArrayList

Ahora vamos a poneros un ejemplo. Para que veáis las diferencias, vamos a utilizar un ejemplo.

Como ejercicio opcional, se plantea implementar el buscaPorNombre de la entrega anterior, pero ahora en función de ArrayList

Ya sabéis que si tenéis alguna duda, no dudéis en exponerla y os contestaremos.

Hasta aquí la entrega de hoy,  la semana que viene volveremos con una entrega en la que resolveremos el ejercicio opcional propuesto y os plantearemos un ejercicio muy completo en el que se repasará todo lo dado hasta el momento.


Continúa leyendo
  • Lourdes

    Estoy implementando el ejercicio resuelto y estoy teniendo problemas, en la primera parte hay que declarar la variable nombre y en el método buscarpornombre tengo que poner ListaPersonas (el nombre de la clase)
    en vez de Persona porque si lo pongo tal como está implementado me sale errores. Pero ya está solucionada esta parte.
    Donde tengo problemas es al implementar el método principal, no sé que nombre ponerle para que no me salga errores.
    Un saludo.

    • Lourdes

      Quería concretar más, me sale subrayado en rojo al implementar los elementos de la lista: lista[0]= new ListaPersonas(10, “Juan”) y no sé qué es lo que estoy haciendo mal.

  • seria el elemento “lista” es un array de personas por lo que el elemento de la posicon 0 no puedes declararle como una lista de personas.

    Sera:

    lista[0]=new Persona(10, juan);

  • Lourdes

    Esta es la primera parte del código (la que he implementado yo), porque tal como está implementado en el volumen me da errores:
    public class ListaPersonas {
    private String nombre;

    public static boolean BuscaPorNombre(ListaPersonas [] lista,String nombre)
    {
    for(int i=0; i<lista.length; i++)
    {
    if(lista[i].nombre.equals(nombre))
    {
    return true;
    }
    }
    return false;
    }

    }
    Pero donde tengo problemas es cuando voy a implementar el método main, me da continuos errores tal como está implementado.
    Saludos

    • enviame los ficheros .java a adrian.crespo@redeszone.net y te los miro

    • public class ListaPersonas {

      public static boolean BuscaPorNombre(Persona[] lista,String nombre)
      {
      for(int i=0; i

      • Lourdes

        Ya implementé la clase ListaPersonas, no me funcionaba antes porque no hice la clase Persona y así ya caí. Me falta el método main.
        Saludos.

        • eche un ojo a tu correo, me podrias poner el error que te da? seguramente sea porque tienes el metodo buscaPorNombre() en la clase listasPersona como método estatico. Seguramente tengas que quitar es el estatico y crear en el main un objeto de ListaPerssona.

          ListaPersona lp = new ListaPersona();

          y despues al hacer la llamada:

          lp.buscaPorNombre(……, …….)

          De esta manera de podria dejar de dar el error. Si no es asi, dime que error te da de compilaciñon

          • Lourdes

            if(BuscaPorNombre(lista,”Adrian”)==true), en esta sentencia tengo subrayado en rojo BuscaPorNombre. Lo he mirado y en efecto en la clase ListaPersonas tengo el método como estático. Luego lo miraré.
            Un saludo y gracias por todo.

          • public class NewMain {

            /**
            * @param args the command line arguments
            */
            public static void main(String[] args) {
            // TODO code application logic here
            Persona [] lista = new Persona[5];
            ListaPersona lp = new ListaPersona();//NUEVO

            lista[0] = new Persona(10,”Juan”);
            lista[1] = new Persona(18,”Andres”);
            lista[2] = new Persona(14,”Pedro”);
            lista[3] = new Persona(8,”Ana”);
            lista[4] = new Persona(13,”Lucia”);

            if(lp.BuscaPorNombre(lista,”Adrian”)==true)//MODIFICADO
            {
            System.out.println(“Persona encontrada”);
            }else{
            System.out.println(“No existe la persona en la lista”);
            }
            }
            }

            mira haber si este main te funciona, observa que al quitar el static y el main tenerlo en otra clase separada, te obligas a crear un objeto de la clase ListaPersona

  • Lourdes

    Ahora por fin, ya no sale errores.
    Saludos y gracias.

  • Creo que el ArrayList no solo puede ser creado con objetos sino también con tipos de datos nativos, es decir podemos crear uno con la clase envolvente del dato nativo:
    ArrayList vector= new ArrayList ();

  • Ana

    Hola, estoy haciendo el curso pero veo que las soluciones de los ejercicios no aparecen. ¿Las habéis quitado? ¿Están publicadas en algún otro sitio?

    Gracias

    • En esta misma entrada tienes la solución del ejercicio que propusimos en la entrada anterior, de hecho, es lo primero 😉