Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: jNillo 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:
public enum GeneroEnumerado
{
COMEDIA, ACCION, TERROR, CIENCIAFICCION;
}
esta la principal:
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.
-
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
public enum GeneroEnumerado
{
COMEDIA, ACCION, TERROR, CIENCIAFICCION, GENERO_NO_DEFINIDO;
}
Clase Pelicula
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