Autor Tema: Ejemplo con tipos enumerados Java (enum)  (Leído 3595 veces)

jNillo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Ejemplo con tipos enumerados Java (enum)
« en: 25 de Marzo 2015, 15:02 »
Hola buenas, soy nuevo aquí, he llegando a este foro después de buscar mucho en internet acerca de los tipos enumerados, he decidido registrarme porque veo que este foro es muy interesante, hay gente que "controla mucho" y está muy bien hecho, estoy seguro que me vendrá genial para aprender a programar.

Tengo el siguiente problema:

Tengo que realizar un proyecto con BlueJ para gestionar una sala de cine. Una clase principal llamada pelicula debe tener varios atributos (con sus geters y seters), uno de ellos es el género de la pelicula que debe ser de tipo enumerado. Siempre que creo una nueva instancia de la clase pelicula, al llegar al atributo genero y darle valor, siempre me salta el "Error: incompatible types".

Llevo muchas horas y he intentado de todo: utilizando un tipo enumerado "simple", un tipo de enumerado "complejo" asociando una cadena a cada valor del tipo enumerado,  por ejemplo: TERROR("Terror"),  he probado con switch, con if-else, con llamadas externas a métodos del tipo enumerado,  pero no hay manera.

esta es la clase enumerada:
Código: [Seleccionar]
public enum GeneroEnumerado
{
    COMEDIA, ACCION, TERROR, CIENCIAFICCION;
}


esta la principal:
Código: [Seleccionar]
public class Pelicula
{
    private String titulo;
    private String director;
    private int anyo;
    private String sinopsis;
    private GeneroEnumerado genero;
   
   
    public Pelicula(String eltitulo, String eldirector, int elanyo, String lasinopsis,
    String elgenero)
    {
        // initialise instance variables
        titulo=eltitulo;
        director=eldirector;
        anyo=elanyo;
        sinopsis=lasinopsis;
        genero=GeneroEnumerado.COMEDIA;
        if ( elgenero == "terror")
        {
            genero=GeneroEnumerado.TERROR;
        }
        else if ( elgenero == "comedia")
        {
            genero=GeneroEnumerado.COMEDIA;
        }
         else if ( elgenero == "accion")
        {
            genero=GeneroEnumerado.ACCION;
        }
         else if ( elgenero == "cienciaficcion")
        {
            genero=GeneroEnumerado.CIENCIAFICCION;
        }
        else
        {
            System.out.println("no es un genero valido");
        }       
    }

     public GeneroEnumerado getGenero()
    {
        return genero;
    }
    public String getTitulo()
    {
        return titulo;
    }
    public String getDirector()
    {
        return director;
    }
    public int getAnyo()
    {
        return anyo;
    }
    public String getSinopsis()
    {
        return sinopsis;
    }
    public void setTitulo(String eltitulo)
    {
        titulo=eltitulo;
    }
    public void setDirector(String eldirector)
    {
        director=eldirector;
    }
    public void setAnyo(int elanyo)
    {
        anyo=elanyo;
    }
    public void setSinopsis(String lasinopsis)
    {
        sinopsis=lasinopsis;
    }
    public void mostrarInfoPelicula()
    {
        // put your code here
        System.out.println("Pelicula: <"+titulo+">");
        System.out.println("Director: <"+director+">");
        System.out.println("Anyo: <"+anyo+">");
        System.out.println("Sinopsis: <"+sinopsis+">");
    }
}

-Como se ve, inicializo el tipo enumerado dándole un valor, COMEDIA en este caso, pues creo que de lo contrario sería fallo al estar vacío, null.

-Esta es una de las muchas "malas versiones" que he probado, me he atascado en esto y tengo que modificar varias cosas, por ejemplo sé que debo utilizar la palabra clave this.

-Como también he de crear un setGenero, creo que sería mejor llamar a dicho setGenero desde el constructor, ¿no?.

-Consultando el foro he visto problemas en que se utiliza el método Scanner, pero yo de momento no puedo utilizarlo, no debo utilizar ni Scanner ni importar ningún otro paquete.

-A la hora de entrar el atributo he probado de muchas formas, por ejemplo si quiero entrar terror he probado: "TERROR", TERROR, "terror", terror, pero ni de suerte.

Muchas gracias de antemano, sé que estoy muy verde todavía  :-[, pero me está gustando esto de programar.
« Última modificación: 26 de Marzo 2015, 08:53 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Novato con tipos enumerados Java
« Respuesta #1 en: 25 de Marzo 2015, 20:59 »
Hola jNillo

Con el código que has enviado me hago una idea de la base de tu proyecto.
Pero para averiguar de donde vienen los errores tendrías que aportar el código relacionado con el error.

Te reenvio las dos clases con pequeños cambios que las hacen más operativas.

Clase GeneroEnumerado
Código: [Seleccionar]
public enum GeneroEnumerado
{
    COMEDIA, ACCION, TERROR, CIENCIAFICCION, GENERO_NO_DEFINIDO;
}

Clase Pelicula
Código: [Seleccionar]
public class Pelicula
{
    private String titulo;
    private String director;
    private int anyo;
    private String sinopsis;
    private GeneroEnumerado genero;

    /** @param Si en el parámetro 'elgenero' pones un texto inválido, se tomará GENERO_NO_DEFINIDO */

    public Pelicula(String eltitulo, String eldirector, int elanyo, String lasinopsis,
    String elgenero)
    {
        // initialise instance variables
        titulo=eltitulo;
        director=eldirector;
        anyo=elanyo;
        sinopsis=lasinopsis;
        genero=decideGenero(elgenero);
        // las dos siguientes líneas se pueden eliminar
        System.out.println("Mostrando los datos al inicializar:");
        mostrarInfoPelicula();
    }

    public GeneroEnumerado getGenero()
    {
        return genero;
    }

    public String getTitulo()
    {
        return titulo;
    }

    public String getDirector()
    {
        return director;
    }

    public int getAnyo()
    {
        return anyo;
    }

    public String getSinopsis()
    {
        return sinopsis;
    }

    public void setGenero(String elGenero)
    {
        genero = decideGenero(elGenero);
    }

    public void setTitulo(String eltitulo)
    {
        titulo=eltitulo;
    }

    public void setDirector(String eldirector)
    {
        director=eldirector;
    }

    public void setAnyo(int elanyo)
    {
        anyo=elanyo;
    }

    public void setSinopsis(String lasinopsis)
    {
        sinopsis=lasinopsis;
    }

    public void mostrarInfoPelicula()
    {
        // put your code here
        System.out.println("Pelicula: <"+titulo+">");
        System.out.println("Director: <"+director+">");
        System.out.println("Anyo: <"+anyo+">");
        System.out.println("Sinopsis: <"+sinopsis+">");
        System.out.println("Género por nombre: <"+genero.name()+">");
        System.out.println("Género por método: <"+getGenero()+">");
    }

    private GeneroEnumerado decideGenero(String elgenero) {
        if ( elgenero.equalsIgnoreCase("terror"))
        {
            return GeneroEnumerado.TERROR;
        }
        else if ( elgenero.equalsIgnoreCase("comedia"))
        {
            return GeneroEnumerado.COMEDIA;
        }
        else if ( elgenero.equalsIgnoreCase("accion"))
        {
            return GeneroEnumerado.ACCION;
        }
        else if ( elgenero.equalsIgnoreCase("cienciaficcion"))
        {
            return GeneroEnumerado.CIENCIAFICCION;
        }
        else
        {
            System.out.println("<" + elgenero + "> no es un genero valido");
            return GeneroEnumerado.GENERO_NO_DEFINIDO;
        }       
    }
}
Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".