Curso Java.Volumen XV: Resolución del ejercicio propuesto

Escrito por Adrián Crespo
Java

Sseguimos con las entregas del curso de Java de RedesZone. En este volumen vamos a centrarnos en analizar la solución del ejercicio que se os propuso en el volumen anterior.

Como ya se os comentó, se trataba de un ejercicio de mayor complejidad que los propuestos anteriormente, pero que seguramente os será útil para resolver dudas que todavía tengáis y otras que tal vez nunca os habríais planteado.

Sin tardar más tiempo, vamos a ponernos manos a la obra con el ejercicio.

En primer lugar, vamos a resolver la primera de las dos partes que constaba el ejercicio:

  • Primera Parte

Deseamos implementar una clase Coche. La clase Coche tendrá como atributos la matrícula del coche, el nombre del dueño, y el número de bastidor. Ahora no nos valdrá para nada, pero decir que el número de bastidor de un coche es único, por lo tanto, no hay dos coches con el mismo número de bastidor. Clase Coche tendrá como métodos un constructor, al que se le pasará la matrícula, el nombre del propietario, y el número de bastidor. También tendrá tres métodos que retornarán  respectivamente la matrícula, el nombre del dueño y el bastidor.

Comentarios:

Es conveniente que ya empecemos a poner los atributos de una clase como privados. ¿Qué cambios supone esto? Sólamente podremos acceder al valor de estos atributos por medio de los métodos observadores.

La primera parte es sencilla y era una clase más o menos como las que hemos estado implementando hasta ahora (por ejemplo, la clase Persona). Vamos ahora con la segunda parte del problema y donde podéis haber tenido mas dificultades.

  • Segunda Parte

Somos los dueños de una aseguradora y queremos llevar de manera organizada toda la cartera de coches que tenemos asegurados. Por lo tanto para ello deberemos utilizar o un Array o un ArrayList. En una clase separada que llamaremos por ejemplo ListaCoches, tendremos como atributos un lista de coches. Como métodos, tendremos un constructor, y dos métodos más:

-insertaCoche: se le pasa como parámetro un Coche y el método se encarga de insertarle en la lista. Antes de insertarle el método deberá recorrer la lista y comprobar que el número de bastidor no ha sido ya insertado. Si es así, retornamos un booleano (false). En caso negativo, procedemos a la inserción y retornamos true.

-buscaVehiculos: se le pasará el nombre del propietario y, mostrará por pantalla el número de vehículos que tiene cada dueño y el número de bastidor de cada vehículo por lo tanto, será necesario un recorrido de la lista.

Primero vamos a comentar el constructor, los atributos de la clase y el método inserta.

Comentarios:

Si la solución es con un array, deberemos  crearle con un tamaño lo suficientemente grande. Como no vamos a insertar todos los elementos deberemos de llevar un contador de elementos insertados que nos ayudara a la hora de insertar elementos y de recorrer el array, ya que debemos solo recorrerle hasta donde “tenemos” elementos insertados. Las demás posiciones al estar vacias al intentar recorrerlas saltaría una excepción el funcionamiento no sería el correcto.

Con respecto al método inserta, debemos utilizar una variable booleana inicializada a false. Debemos recorrer el array hasta encontrar alguna coincidencia. Si tal coincidencia existe la variable booleana se pondrá a true y por lo tanto no podremos insertar el elemento porque ya existe ese bastidor es nuestra lista.

Vamos con el método de contar las coincidencias para un determinado propietario

Comentarios:

Como podemos ver necesitamos un contador que se incrementara solamente cuando el nombre del vehículo contenido en la lista, sea igual al del parámetro del método.

Después de haber revisado la clase Coche y ListaCoches vamos con el método de prueba

Comentarios:

Se trata de un programa principal en el que tenemos que probar el funcionamiento de las otras dos clases. Creamos una serie de coches, cremos una lista de coches y despues añadimos unos cuantos, comprobamos que el metodo inserta funciona y después el método buscaPorNombre.

A continuación os darémos la solución para los que han decidido hacerlo con la clase ArrayList

La clase ListaCoches

Comentarios:

Como podéis observar el atributo numeroCoches a desaparecido, ya que la clase ArrayList nos proporciona el método size().
También para acceder a un elemento debemos de utilizar primero get(i). En el método insertar los coches podemos utilizar el add directamente y despreocuparnos por donde lo insertará ya que la propia clase ArrayList esta implementada para que el elemento se inserte al final de la lista .

El programa principal se mantiene igual ya que la única clase que hay que modificar es ListaCoches.

Hasta aquí la solución del ejercicio.

Podríamos decir que hemos acabado con los Arrays y ArrayList. En el caso de que queráis que se repase más no tenéis nada más que exponerlo.

En el próximo volumen seguiremos avanzando un poco con la utilidades de Java. Por lo que en el siguiente volumen hablaremos de herencia en los objetos de Java.


Continúa leyendo
  • Serpyd

    Con estos cursos, me pierdo. Haber si hago una lectura de todo otra vez, porque madre mia, como me pierdo.

  • Lourdes

    Hola, ayer implementé la parte del ejercicio con Array y en el método principal, creo que te has equivocado,donde pone if(lista.insertaCoche(c7)==false) en vez de ‘false’ he puesto ‘true’ para que se pueda insertar.
    Un saludo.

    • esa linea lo que hace es comparar si el metodo inserta ha podido insertar el coche o no, retornando true o false respectivamente. Entonces dependiendo del booleano retornado imprimira un mensaje u otro, pero eso no evita que se inserte o que no. Lo que haces es controlar si se inserta correctamente o no se inserta

  • martin

    buenisimo el curso voy a empezar espero que lo sigan haciendo hasta el final

  • Rober

    Desde la parte de los arrays multidimensionales y array list estoy pez, por mas que me lo miro no me entero, lo dejare para mañana para ver si me entero mejor, gracias por el curso

    • las dudas que tengas, mandamelas al correo y te ayudo 🙂

  • Nico

    De 10 los cursos… Los estoy siguiendo, y con ellos repasando muchísimo.. Saludos!

  • Alberto

    hace un tiempo me estoy dejando guiar por este articulo y sabes tengo una duda, lo que sucede es que en este capitulo se ingresa el vehiculo pero sus datos donde quedan guardados para luego imprimirlos…
    ejemplo imprima el vehilo xxxxx c82 de Juan
    como lo recorre para encontrar a ese usuario

  • disqus_F1zCc4WAJY

    tengo una pregunta, en esta parte:

    if(lista.insertarCoche(c7)==false){

    System.out.println(“Accion Fallida”);

    }else{

    System.out.println(“Añadido”);

    }

    siempre me sale accion fallida, q tengo mal?, si esta == a la repuesta que exponen

  • Clarita

    No se si seguiréis contestando dudas…
    No puedo implementar correctamente porque en el main al invocar a los métodos “BuscaVehículo” e “InsertaCoche” da un error que dice: no se puede invocar a un método no estático desde un método estático. Como puedo solucionarlo??

  • Paola

    Hola, tengo una duda, en los métodos utilizados en la solución de ArrayList, ¿no es necesario pasar la lista?