ayuda con codigo

Iniciado por andaluz, 11 Mayo 2010, 18:49 PM

0 Miembros y 1 Visitante están viendo este tema.

andaluz

hola a todos, he realizado un programa que me analice una fecha introducida por teclado separada por ":", la cual me tiene que decir al introducirle una fecha:
   - si la fecha es valida.
   - me indicara en la estacion del año estamos.

aqui va el codigo:

Código (java) [Seleccionar]

package ejer_repaso2;
import java.io.*;
public class Main
{

    public static void main(String[] args)
    {
        InputStreamReader isr;
        BufferedReader br;

        isr=new InputStreamReader(System.in);
        br=new BufferedReader(isr);
        String fecha;
        String trozos[];
        int dia,mes,año;
        boolean enc;

        int i=0;
        int d=0;
        enc=false;
        int m=0;

        try
        {
            System.out.println("Introduce la fechaa: ");
            fecha=br.readLine();
            trozos=fecha.split(":");

            while(i<trozos.length)
            {
                if(EsNum(trozos[i]))
                {
                    enc=true;
                }
                else
                {
                    i++;
                }
            }
            dia=Integer.parseInt(trozos[0]);
            mes=Integer.parseInt(trozos[1]);
            año=Integer.parseInt(trozos[2]);

            if(año>1999 && año<3000)
            {
                if(mes>0 && mes<13)
                {
                    if(((mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) ||
                        (mes==4 || mes==6 || mes==9 || mes==11) && d>=1 && d<=30) || (m==2 && d>=1 && d<=28))
                    {
                        System.out.println("Fecha valida");
                    }
                    else
                    {
                        System.out.println("Fecha no valida");
                    }
                }
                else
                {
                    System.out.println("Fecha no valida");
                }
            }
            else
            {
                System.out.println("Fecha no valida");
            }
            /*
             *estaciones
             * primavera[21/03] asta (21/06)
             * verano [21/06] asta (21/09)
             * otonio [21/09] asta (21/12)
             * invierno [21/12] asta (21/03)
            */
            if(((mes==3 && d>=3) || (mes==4 && d>=1 && mes==4 && d>=30) ||
                (mes==5 && d>=1 && mes==5 && d>=31) || (mes==6 && d>=1 && mes==6 && d>21)))
            {
                System.out.println("Es Primavera");
            }
            else
            {
                if(((mes==6 && d>=21) || (mes==7 && d>=1 && mes==7 &&d>=31) ||
                    (mes==8 && d>=1 && mes==8 && d>=31) || (mes==9 && d>=1 && m==9 && d>21)))
                {
                    System.out.println("Es Verano");
                }
                else
                {
                    if(((mes==9 && d>=21) || (mes==10 && d>=1 && mes==10 &&d>=31) ||
                        (mes==11 && d>=1 && mes==11 && d>=31) || (mes==12 && d>=1 && m==12 && d>21)))
                    {
                        System.out.println("Es Otoño");
                    }
                    else
                    {
                        System.out.println("Es Invierno");
                    }
                }
            }
        }
        catch(Exception ex)
        {
            System.out.println("Error en la lectura "+ex);
        }
    }
    public static boolean EsNum(String fex)
    {
        int j=0;
        boolean e=false;

        while(j<fex.length())
        {
            if(!Character.isDigit(fex.charAt(j)))
            {
                e=true;
            }
            else
            {
                e=false;
            }
        }
        return e;
    }
}

andaluz

el fallo es que no me imprime nada al introducirle la fecha.

Chuidiang

En el método EsNum() no incrementas la j, así que supongo que se queda en el while por los siglos de los siglos.
Se bueno.

andaluz

es verdad, se me habia olvidado incrementar "j", por eso fallaba. gracias

andaluz

me gustaria saber que fallo tiene este codigo, al utilizar || y &&, esque me lio en esto

Código (java) [Seleccionar]

if(((mes==3 && d>=3) || (mes==4 && d>=1 && mes==4 && d>=30) ||
                (mes==5 && d>=1 && mes==5 && d>=31) || (mes==6 && d>=1 && mes==6 && d>21)))
            {
                System.out.println("Es Primavera");
            }
            else
            {
                if(((mes==6 && d>=21) || (mes==7 && d>=1 && mes==7 &&d>=31) ||
                    (mes==8 && d>=1 && mes==8 && d>=31) || (mes==9 && d>=1 && m==9 && d>21)))
                {
                    System.out.println("Es Verano");
                }
                else
                {
                    if(((mes==9 && d>=21) || (mes==10 && d>=1 && mes==10 &&d>=31) ||
                        (mes==11 && d>=1 && mes==11 && d>=31) || (mes==12 && d>=1 && m==12 && d>21)))
                    {
                        System.out.println("Es Otoño");
                    }
                    else
                    {
                        System.out.println("Es Invierno");
                    }
                }
            }
        }

andaluz

me pueden ayudar a resolver este codigo, me dice siempre que es invierno, no me dice la estacion de la fecha que le introduzco, creo que las condiciones || y && no estan bien definidas, me ayudan a definirlas bien??

Chuidiang

Hazlo más simple y piensa un poco en todo el follón que tienes. Fíjate en el primer if, hay un trozo que pone

(mes==4 && d>=1 && mes==4 && d>=30)

suponiendo mes 4, tiene que ser mayor que 1 y mayor que 30. Sobre el primero ¿no?

Fija las cuatro fechas (mes/dia) de cambio de estacion en algun sitio y el if debe ser muy tonto si empiezas por el principio de año


if   (   diaActual < fechaInicioPrimavera ) ---> es invierno
else if ( diaActual < fechaInicioVerano ) ---> es primavera
....


Se bueno.




andaluz

ok, pero la verdad es que entiendo eso que me dices, como lo deberia de hacer? creoque me he equivocado (mes==4 && d>=1 && mes==4 && d<=30) ya que lo que quiero hacer es coger todos los dias en los que esta cada estacion del año.