
Novato: meses y booleans
Publicado por Victor (11 intervenciones) el 21/06/2015 18:40:36
Hola:
Otra de novato, lo siento. El típico ejercicio de meses y días. Llevo bastante revisándolo pero no doy con el error. Es decir, si pongo el 30 de febrero para forzar un error, me da la fecha como buena. Creo que es un tema con los booleanos que controlan el do/while. Básicamente uso dos, uno para validar el formato y otro el número de días del mes. Si ambos están bien, validan el booleano que rompe el bucle do/while.
A ver si alguien puede echar una mano a alguien que empieza, en este caso yo
. Gracias.
Otra de novato, lo siento. El típico ejercicio de meses y días. Llevo bastante revisándolo pero no doy con el error. Es decir, si pongo el 30 de febrero para forzar un error, me da la fecha como buena. Creo que es un tema con los booleanos que controlan el do/while. Básicamente uso dos, uno para validar el formato y otro el número de días del mes. Si ambos están bien, validan el booleano que rompe el bucle do/while.
A ver si alguien puede echar una mano a alguien que empieza, en este caso 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
98
/*
*
*/
package desglosefecha;
import java.util.Scanner;
/**
*
* @author Victor
*/
public class DesgloseFecha {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Inicialización de variables
boolean formatook=false;
boolean fechaok=false;
boolean mesok=false;
boolean feb1=false;
boolean feb2=false;
String fecha;
int dia;
int mes;
int anyo;
// Bucle de comprobación de datos correctos
do{
System.out.println("Por favor, introduzca la fecha en formato DDMMAAAA en números");
Scanner teclado=new Scanner(System.in);
fecha=teclado.nextLine();
dia=Integer.parseInt(fecha.substring(0,2));
mes=Integer.parseInt(fecha.substring(2,4));
anyo=Integer.parseInt(fecha.substring(4,8));
/*
Comprobamos que el número de días y meses es correcto en general
*/
if (dia<32&&mes<13){
formatook=true;
}
switch(mes){
case 2:
/*
...esperando a solucionar el tema de los días...
if((anyo%400==0)|((anyo%4==0)&&(!(anyo%100==0)))){
feb1=true;
}
*/
if (dia<29){
mesok=true;}
break;
case 4:
case 6:
case 9:
case 11:
if(dia<=30){
mesok=true;
}
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(dia<32){
mesok=true;
}
break;
}
if((formatook=true)&(mesok=true)){
fechaok=true;
}
}
while(fechaok=false);
}
}
Valora esta pregunta


1