Java - Ayuda en validar Fecha

 
Vista:
sin imagen de perfil
Val: 66
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en validar Fecha

Publicado por Osvaldo (60 intervenciones) el 11/08/2020 17:14:05
Saludos a todos. Les suplico su ayuda en resolver esto. Es que me genera innumerables errores al codificar.


- Realizar un programa Java que ingrese 3 números por teclado, correspondientes a DD/MM/AAAA (día/mes/año). Si los 3 números ingresados son: 99, 99, 9999 <SALIR>
o ‘Ingresar Día (99):’
o ‘Ingresar Mes (99):’
o ‘Ingresar Año (9999):’
- Desplegar lo siguiente:
o ‘La fecha ingresada es 01/05/2014’ (Por ejemplo, según los 3 números ingresados)
- Validar:
o El DIA ingresado:
 Entre 1 y 31
 Si el DIA es 0: desplegar mensaje ‘Dia 0 incorrecto’
 Si el DIA es > 31: desplegar mensaje ‘Dia >31 incorrecto’
 Si el DIA es < 0: desplegar mensaje ‘Dia < 0 incorrecto’
 En caso que el día ingresado sea erróneo debe salir y no permitir que el usuario ingrese el mes y el año
o El MES ingresado:
 Entre 1 y 12
 Si el MES es 0: desplegar mensaje ‘Mes 0 incorrecto’
 Si el MES es > 12: desplegar mensaje ‘Mes >12 incorrecto’
 Si el MES es < 0: desplegar mensaje ‘Mes < 0 incorrecto’
 Y además, si ingresó día 31 (por ejemplo), al ingresar el mes validar que dicho mes tenga 31 días
 En caso que el mes ingresado sea erróneo desplegar mensaje…
o El AÑO ingresado:
 Si el AÑO es 0: desplegar mensaje ‘Año 0 incorrecto’
 Si el año es bisiesto, además de desplegar la fecha ingresada, se debe desplegar que el año es bisiesto
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
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

Ayuda en validar Fecha

Publicado por Kabuto (1381 intervenciones) el 11/08/2020 19:35:35
Te será más fácil si usas distintos métodos para validar el dia, luego el mes y luego el año.

Puedes hacer estos métodos de tipo boolean. Sólo si consideran válido el valor recibido, que retorne true y sigues pidiendo el siguiente dato.
Si no lo consideran válido, que informen por pantalla el motivo y que retornen false, en cuyo caso no se sigue pidiendo más datos.

A continuación pongo un ejemplo para validar el día. Intenta completar tú el código añadiendo métodos para validar el mes y el año.

Ten en cuenta que el método que tiene que validar el mes, ha de recibir también el día. Ya que si por ejemplo el dia es 31 y el mes es 2 (Febrero), o 4(Abril), etc..., el mes no se puede considerar válido porque no llegan a 31.

Y el método que valida el año, ha de recibir además el día y el mes. Porque si el día es 29, y el mes es 2, ha de comprobar que el año es bisiesto, de lo contrario la fecha no será válida.

Cuando te quedes atascado o veas que algo no te funciona, publica aquí tu código y te ayudamos a resolverlo.

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
public class ValidarFecha {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
		System.out.print("Ingresar día(DD): ");
		int dia = teclado.nextInt();
		if (validarDia(dia)) {
			//Seguimos pidiento el mes y luego el año
		}
 
		teclado.close();
		System.out.println("\nFIN DE PROGRAMA");
	}
 
	//Método para validar el día
	private static boolean validarDia(int dia) {
		if (dia == 0) {
			System.out.println("Dia 0 incorrecto");
			return false;
		}
		else if (dia > 31) {
			System.out.println("Dia >31 incorrecto");
			return false;
		}
		else if (dia < 0) {
			System.out.println("Dia <0 incorrecto");
			return false;
		}
		else
			return true; //Día correcto
	}
 
}
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
Val: 66
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en validar Fecha

Publicado por Osvaldo (60 intervenciones) el 17/08/2020 22:46:58
Gracias por la ayuda. Te agradezco de corazón.

He estado codificando.
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package validarfecha;
import java.util.Scanner;
 
public class ValidarFecha {
 
 
    public static void main(String[] args) {
 
        Scanner teclado = new Scanner(System.in);
        System.out.print("Ingresar día(DD): ");
        int dia = teclado.nextInt();
        System.out.print("Ingrese mes (DDD)" );
        int mes = teclado.nextInt();
        System.out.print("Ingrese año (DDDD)");
        int año = teclado.nextInt();
 
        teclado.close();
        System.out.println("\n FIN DE PROGRAMA");
}
 
    //Metodo para validar el día
    private static boolean validarDia(int dia) {
        if (dia == 0) {
            System.out.println("Dia 0 incorrecto");
            return false;
}
        else if (dia > 31) {
            System.out.println("Dia > 31 incorrecto");
            return false;
        }
        else if (dia < 0) {
            System.out.println("Dia <0 incorrecto");
        }
        else
        return false;
 
 
    }
 
    private static boolean validarMes(int dia, int mes){
        if(dia>1 && dia>31){
            System.out.println("Dias incorrectos");
            return false;
        }
 
        else if (dia ==0){
            System.out.println("Dia <0 incorecto");
            return false;
        }
 
        if (mes ==0){
 
            System.out.println("Mes 0 Incorrecto");
            return false;
     }
        else if (mes <0 && mes <12);
          System.out.println("Mes 0 y Mes 12 Incorrecto");
          return false;
}
if (mes == 1 && dia <> 31);
System.out.Println("Dias de Mes 1 icorrecto");
return false;
}
 
if (mes == 2 && dia<> 28  && dia<> 29);
System.out.Println("Dias de Mes 2 incorrectos");
return false;
}
if (mes ==3 && dia <>31);
System.out.Println("Dias de Mes 3 incorrectos");
return false;
}
if (mes==4 && dia <> 30);
System.out.Println("Dias de mes 4 incorrectos");
return false;
}
if (mes ==5 && dia <> 31);
System.out.Println("Dias de mes 5 incorrectos");
return false;
}
if (mes == 6 && <> 30);
System.out.Println("Dias de mes 6 incorrectos");
return false;
}
if (mes == 7 && <> 31);
System.out.Println("Dias de mes 7 incorrectos");
return false;
}
if (mes == 8 && <> 31);
System.out.Println("Dias de mes 8 incorrectos");
return false;
}
if (mes == 9 && <> 30);
System.out.Println("Dias de mes 9 incorrectos");
return false;
}
if (mes == 10 && <> 31);
System.out.Println("Dias de mes 9 incorrectos");
return false;
}
if (mes == 11 && <> 30);
System.out.Println("Dias de mes 11 incorrectos");
return false;
}
if (mes == 12 && <> 31);
System.out.Println("Dias de mes 12 incorrectos");
return false;
}
 
else
   return true;
}
 
 
private static boolean validarAño(int dia, int mes, int año){
 
if (año == 0) {
    System.out.println("Año 0 incorrecto");
    return false;
}
 
 
}
 
}

Me genera los siguientes errores: run:
java.lang.ClassFormatError: Duplicate field name "<error>" with signature "Ljava.lang.Object;" in class file validarfecha/ValidarFecha
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" C:\Users\YO\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 6 seconds)
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

Ayuda en validar Fecha

Publicado por Kabuto (1381 intervenciones) el 18/08/2020 02:25:18
1
A JNI error has occurred
Humm, eso suele ser problema del JDK: datos corrompidos, conflicto de versiones...

Yo probaría a reinstalar de nuevo el JDK que estés usando. Incluso ya puestos, descargar la última versión.


Sobre el código,
el método validarMes(), no tiene que volver a validar el día.
Ya hay un método que valida el día, y solo si este método retorna true (porque el día es válido), entonces pasarías a pedir el mes y validarlo.

Lo que hay que tener en cuenta es que validarMes() ha de saber que día se ha introducido. Pero, repito, no para volver a validarlo, si no para poder validar el mes.

Si el usuario pone día 31 (que es válido) y luego pone el mes 4 (Abril).., este mes no sería válido para este día, porque Abril solo tiene 30 días, no existe una fecha que sea 31 de Abril.
Por eso necesita conocer el día, porque algunos meses pueden no ser válido según el día introducido.

Y con el año pasa lo mismo, necesita saber el día y el mes, aunque solo para ver si se ha de comprobar si es año bisiesto.
Si el dia es 28 y el mes es 2(Febrero), no hay que comprobar nada, mientras el año sea distinto de 0, la fecha estará bien.

Pero si el dia es 29 y el mes es 2, esto solo ocurre en los años bisiestos. Y entonces hay que comprobar si el año introducido es bisiesto, ya que solo entonces la fecha se considerará válida.

Intenta solucionar primero lo del error de JNI y ya luego veremos si necesitas ayuda para el código de los métodos.
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
Val: 66
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en validar Fecha

Publicado por Osvaldo (60 intervenciones) el 20/08/2020 23:27:36
Gracias por las indicaciones. Seguí las instrucciones. Al compilar no me genera error.Si podrian revisar mi código e indicarme errores. Salud a todos.


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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package validarfecha;
 
import java.util.GregorianCalendar;
import java.util.Scanner;
 
public class ValidarFecha {
 
 
    public static void main(String[] args) {
 
 
 
        Scanner teclado = new Scanner(System.in);
        System.out.print("Ingresar día(DD): ");
        int dia = teclado.nextInt();
        System.out.print("Ingrese mes (DDD)" );
        int mes = teclado.nextInt();
        System.out.print("Ingrese año (DDDD)");
        int año = teclado.nextInt();
 
        teclado.close();
        System.out.println("\n FIN DE PROGRAMA");
}
 
    //Metodo para validar el día
    private static boolean validarDia(int dia) {
        if (dia == 0) {
            System.out.println("Dia 0 incorrecto");
            return false;
}
        else if (dia > 31) {
            System.out.println("Dia > 31 incorrecto");
            return false;
        }
        else if (dia < 0) {
            System.out.println("Dia <0 incorrecto");
            return false;
        }
        else
        return true;
    }
 
 
 
 
    private static boolean validarMes(int dia, int mes){
 
 
          if (mes ==0){
                    System.out.println("Mes 0 Incorrecto");
            return false;
     }
        else if (mes <0 && mes <12){
          System.out.println("Mes 0 y Mes 12 Incorrecto");
          return false;
}
        else if (mes != 1 && dia !=31){
            System.out.println("Mes  Incorrecto");
          return false;
 
}
        else if (mes != 2 && dia !=28){
             System.out.println("Mes Correcto");
            return false;
        }
 
             else if (mes != 3  && dia !=31){
             System.out.println("Mes Correcto");
            return false;
        }
 
             else if (mes != 4 && dia !=30){
             System.out.println("Mes Correcto");
            return false;
        }
 
             else if (mes != 5 && dia !=31){
             System.out.println("Mes Correcto");
            return false;
        }
 
             else if (mes != 6 && dia !=30){
             System.out.println("Mes Correcto");
            return false;
        }
             else if (mes != 7 && dia !=31){
             System.out.println("Mes Correcto");
            return false;
        }
             else if (mes != 8 && dia !=31){
             System.out.println("Mes Correcto");
            return false;
        }
             else if (mes != 9 && dia !=30){
             System.out.println("Mes Correcto");
            return false;
        }
             else if (mes != 10 && dia !=31){
             System.out.println("Mes Correcto");
            return false;
        }
 
             else if (mes != 11 && dia !=30){
             System.out.println("Mes Correcto");
            return false;
        }
              else if (mes != 12 && dia !=31){
             System.out.println("Mes Correcto");
            return false;
        }
          else
                  return true;
 
    }
 
 
 
 
private static boolean validarAño(int dia, int mes, int año){
 
if (año == 0) {
    System.out.println("Año 0 incorrecto");
    return false;
}
else
     return true;
}
 
public static boolean AñoBisiesto(int año){
 
   GregorianCalendar calendar = new GregorianCalendar();
   boolean esBisiesto = false;
   if (calendar.isLeapYear(año)){
       esBisiesto = true;
 
}
   return esBisiesto;
 
}
}
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

Ayuda en validar Fecha

Publicado por Kabuto (1381 intervenciones) el 21/08/2020 01:20:14
Hola.

El método para validar el mes se puede simplificar, a parte de que no estoy seguro de que te esté dando buen resultado, aunque no lo he probado.

Primero se comprueba si es Febrero, que es el más distinto de los demás, y si el día es aceptable para este mes.

Si no es Febrero, y el día es 30, entonces es aceptable para TODOS los meses restantes.

Si el día es 31, entonces es inaceptable para determinados meses. Hemos de preguntar por estos meses, y se puede simplificar la consulta usando un switch.

Te dejo el código completo de cómo lo haría yo:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
public class ValidarFecha {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
		System.out.print("Ingresar día(DD): ");
		int dia = teclado.nextInt();
		if (validarDia(dia)) {
			System.out.print("Ingresar mes(MM): ");
			int mes = teclado.nextInt();
 
			if (validarMes(dia, mes)) {
				System.out.print("Ingresar año(AAAA): ");
				int anio = teclado.nextInt();
 
				if (validarAnio(dia, mes, anio))
					System.out.println("\nLa fecha es válida");
			}
		}
 
		teclado.close();
		System.out.println("\nFIN DE PROGRAMA");
	}
 
	//Método para validar el día
	private static boolean validarDia(int dia) {
		if (dia == 0) {
			System.out.println("Dia 0 incorrecto");
			return false;
		}
		else if (dia > 31) {
			System.out.println("Dia >31 incorrecto");
			return false;
		}
		else if (dia < 0) {
			System.out.println("Dia <0 incorrecto");
			return false;
		}
		else
			return true; //Día correcto
	}
 
	private static boolean validarMes(int dia, int mes) {
		if (mes == 0) {
			System.out.println("Mes 0 incorrecto");
			return false;
		}
		else if (mes < 0) {
			System.out.println("Mes <0 incorrecto");
			return false;
		}
		else if (mes > 12) {
			System.out.println("Mes >12 incorrecto");
			return false;
		}
		else if (dia > 29 && mes == 2) {
			System.out.println("Febrero no puede tener dia mayor que 29");
			return false;
		}
		else if (dia == 31) {
			//Inaceptable para determinados meses
			switch (mes) {
			case 2:
			case 4:
			case 6:
			case 9:
			case 11:
				System.out.println("Dia 31 no es válido para mes " + mes);
				return false;
			default: return true;
			}
		}
		else
			return true;
	}
 
	private static boolean validarAnio(int dia, int mes, int anio) {
		if (anio == 0) {
			System.out.println("Año 0 incorrecto");
			return false;
		}
		else if (mes == 2 && dia == 29) {
			if (esBisiesto(anio))
				return true;
			else {
				System.out.println("Año no válido, no es bisiesto");
				return false;
			}
		}
		else
			return true;
	}
 
	private static boolean esBisiesto(int anio) {
		return (anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0));
	}
}
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
Val: 66
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en validar Fecha

Publicado por Osvaldo (60 intervenciones) el 21/08/2020 13:53:08
Eternamente agradecido. Éxitos.
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