Java - Método que devuelva nombre enumerado

 
Vista:

Método que devuelva nombre enumerado

Publicado por Eva (2 intervenciones) el 10/04/2020 14:47:37
Hola,

estoy aprendiendo a programar en Java. Tengo que crear un método estático y público que se llame isRoleActive, que reciba como parámetros un rol y una fecha, y devuelva true si el rol se encuentra activo para la fecha dada. En caso contrario tiene que devolver false. Es decir, yo introduzco un rol y una fecha, y debe comprobar que el rol que introduzco se corresponde con alguno de los que existen en el enumerado y, además, la fecha introducida esté dentro de las fechas que hay definidas para cada valor del enumerado. Por ejemplo, si introduzco como rol GUESS y la fecha (2021, 9, 12), el método debe devolver true. Pero no sé cómo implementar este método (en concreto, no sé cómo definir los parámetros que debe recibir el método, y cómo comprobar que el rol recibido por parámetro se corresponda con alguno de los valores del enumerado). Lo tengo a medio definir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.time.LocalDate;
 
public enum Role {
 
	GUESS(LocalDate.of(2008, 3, 21),LocalDate.of(2022, 4, 19),Permission.READ),
	AUTHOR(LocalDate.of(2012, 4, 20),LocalDate.of(2023, 5, 20),Permission.READ_WRITE),
	EDITOR(LocalDate.of(2019, 5, 21),LocalDate.of(2021, 6, 20),Permission.READ_WRITE_UPDATE),
	EDITOR_BOSS(LocalDate.of(2000, 6, 21),LocalDate.of(2002, 7, 22),Permission.READ_WRITE_UPDATE),
	ADMIN(LocalDate.of(2008, 7, 23),LocalDate.of(2019, 8, 22),Permission.ALL);
 
	private LocalDate start, end;
	private Permission permission;
 
	private Role(LocalDate start, LocalDate end, Permission permission) {
		this.start = start;
		this.end = end;
		this.permission = permission;
	}
 
	public static boolean isRoleActive(Role role, LocalDate date) throws Exception {
		LocalDate date1 = LocalDate.of(1999, 12, 31);
 
		if(date.isBefore(date1) || date.isEqual(date1)) {
			throw new Exception("It has been impossible to obtain the information about the role "+date);
		} else {
			for(Role rol : values()) {
				if ((rol.start.isBefore(date) || rol.start.isEqual(date))
	                              && (rol.end.isAfter(date) || rol.end.isEqual(date))
	                              && (rol.name == role)) {
	                          return true;
				} else {
			         return false;
				}
			}
		}
 
		throw new Exception("The format of the date is incorrect.");
	}

¿Alguien podría echarme una mano?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Método que devuelva nombre enumerado

Publicado por Rodrigo (623 intervenciones) el 10/04/2020 15:20:32
Deberia ser un one-liner, yo creo que va cerca de esto:
1
2
3
public static boolean isRoleActive(Role role, LocalDate date)  {
   return date.isAfter(role.start) && date.isBefore(role.end);
}

hay que agregar la comparacion por igual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Método que devuelva nombre enumerado

Publicado por Eva (2 intervenciones) el 10/04/2020 17:42:14
Hola Rodrigo,

el método tiene que devolver true (así me lo piden) si el rol pasado por parámetro es igual a uno de los enumerados (GUESS, AUTHOR, EDITOR, EDITOR_BOSS, ADMIN) y además la fecha pasada por parámetro está dentro de los límites de fecha de cada enumerado. En caso contrario, debe devolver false. Es decir, por ejemplo, si se pasa lo siguiente:

1
Role.isRoleActive(Role.GUESS, LocalDate.of(2021, 9, 12));

debe devolver true.

No sé de qué tipo debe ser el rol pasado por parámetro (String, Role, ...) ni sé cómo debe ser la condición dentro del if que mire si el rol pasado por parámetro coincide con uno de los nombres de los enumerados (no sé cómo debe ser rol.name == role, esto no está bien). Las demás condiciones además se deben comprobar.

Textualmente me piden que: si para la fecha introducida el método es inferior al año 2000 (inferior o igual al 31 de diciembre de 1999) se debe lanzar la excepción “ It has been impossible to obtain the information about the role”, junto a la fecha pasada al método. También debe lanzarse una excepción cuando se pasa una fecha incorrecta. Las excepciones creo que las tengo bien definidas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar