Java - Como comprender dias del mes según el mes en concreto

 
Vista:
sin imagen de perfil

Como comprender dias del mes según el mes en concreto

Publicado por maria (2 intervenciones) el 31/10/2022 11:58:59
Hola, en clase de programación nos han mandando una tarea donde tenemos que establecer el número máximo de dias de un mes, es decir pedir por teclado el número de dia y de mes y en el caso de de que esté bien el programa siga su curso pero si está mal de error. Me explico con un ejemplo:

El programa pide por teclado el mes:1 (sería Enero)
El programa pide por teclado el día del mes 25 (25 de Enero)
si yo por ejemplo pongo 32, tendría que dar error ya que enero tiene 31 dias.
Entonces lo que tengo que hacer es un comprensión entre 1-31 para Enero, Marzo, Mayo etc...1-30 para Abril, Junio, Septiembre... y de 29 dias para Febrero

Todo esto solo puedo hacerlo con el Switch.

PD: Llevo dias calentandome la cabeza y nada..
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como comprender dias del mes según el mes en concreto

Publicado por Kabuto (1381 intervenciones) el 31/10/2022 18:29:14
Es más fácil de lo que parece

Puedes agrupar los "cases" del switch de manera que estén juntos los meses de 31 días, luego los de 30 y por último febrero.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class CompruebaMesDia {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		System.out.print("Indique mes: ");
		int mes = teclado.nextInt();
		System.out.print("Indique dia: ");
		int dia = teclado.nextInt();
 
		System.out.print("\nLa fecha " + dia + "/" + mes +  " es ");
 
		switch(mes) {
		//Meses 31 dias
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			if (dia >= 1 && dia <= 31)
				System.out.println("CORRECTA");
			else
				System.out.println("INCORRECTA\nDia ha de ser entre 1 y 31");
			break;
		//Meses 30 dias
		case 4:
		case 6:
		case 9:
		case 11:
			if (dia >= 1 && dia <= 30)
				System.out.println("CORRECTA");
			else
				System.out.println("INCORRECTA\nDia ha de ser entre 1 y 30");
			break;
		//Febrero:
		case 2:
			if (dia >= 1 && dia <= 29)
				System.out.println("CORRECTA");
			else
				System.out.println("INCORRECTA\nDia ha de ser entre 1 y 29");
			break;
		default:
			System.out.println("INCORRECTA.\nMes equivocado. Ha de ser un valor entre 1 y 12");
		}
 
		System.out.println("\n\t\tFIN DE PROGRAMA");
		teclado.close();
	}
 
}
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
sin imagen de perfil

Como comprender dias del mes según el mes en concreto

Publicado por maria (2 intervenciones) el 31/10/2022 19:49:22
Muchas gracias, al final lo he sacado esta tarde despues de varios dias, y lo he hecho parecido al tuyo, no del todo igual pero cuando le doy a run file me corre bien el programa. Asi que gracias!! Ahora estoy que no se como hacer para que cuando metan por ejemplo 32 dias en el mes 15, el programa finalice sin seguir haciendo ninguna comprobación más. Pensaba que con el default bastaba pero veo que no es así.
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como comprender dias del mes según el mes en concreto

Publicado por Kabuto (1381 intervenciones) el 31/10/2022 23:22:28
Para eso, puedes coger la parte del código donde compruebas la fecha y convertirlo en un método/función.
Puedes hacer que sea de tipo boolean. Así en el main con un IF compruebas si la comprobación retorna TRUE y por tanto sigues adelante con el resto de comprobaciones.
Si retorna FALSE, pues se acabó el programa.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class CompruebaMesDia {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		System.out.print("Indique mes: ");
		int mes = teclado.nextInt();
		System.out.print("Indique dia: ");
		int dia = teclado.nextInt();
 
		if (comprobarFecha(mes, dia)) {
			System.out.print("\nLa fecha " + dia + "/" + mes +  " es CORRECTA");
			//A continuación seguiría el resto de comprobaciones
			//.....
			//.....
		}
		else
			System.out.println("\nEl programa no continuará...");
 
		System.out.println("\n\t\tFIN DE PROGRAMA");
		teclado.close();
	}
 
	public static boolean comprobarFecha(int mes, int dia) {
		switch(mes) {
		//Meses 31 dias
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			if (dia >= 1 && dia <= 31)
				return true;
			else {
				System.out.println("FECHA INCORRECTA\nDia ha de ser entre 1 y 31");
				return false;
			}
		//Meses 30 dias
		case 4:
		case 6:
		case 9:
		case 11:
			if (dia >= 1 && dia <= 30)
				return true;
			else {
				System.out.println("FECHA INCORRECTA\nDia ha de ser entre 1 y 30");
				return false;
			}
		//Febrero:
		case 2:
			if (dia >= 1 && dia <= 29)
				return true;
			else {
				System.out.println("FECHA INCORRECTA\nDia ha de ser entre 1 y 29");
				return false;
			}
		default:
			System.out.println("FECHA INCORRECTA.\nMes equivocado. Ha de ser un valor entre 1 y 12");
			return false;
		}
	}
 
}



Incluso si quisieras, podrías usar esa función como condición de un bucle WHILE y que se repita una y otra vez hasta que el usuario te proporcione una fecha válida.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		int mes = 0, dia = 0;
		do {
			System.out.print("\nIndique mes: ");
			mes = teclado.nextInt();
			System.out.print("Indique dia: ");
			dia = teclado.nextInt();
		} while (!comprobarFecha(mes, dia));
 
		System.out.print("\nLa fecha " + dia + "/" + mes +  " es CORRECTA");
 
 
		System.out.println("\n\t\tFIN DE PROGRAMA");
		teclado.close();
	}
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