Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: andaluz en 11 Mayo 2010, 18:49 PM

Título: ayuda con codigo
Publicado por: andaluz en 11 Mayo 2010, 18:49 PM
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;
    }
}
Título: Re: ayuda con codigo
Publicado por: andaluz en 11 Mayo 2010, 19:09 PM
el fallo es que no me imprime nada al introducirle la fecha.
Título: Re: ayuda con codigo
Publicado por: Chuidiang en 11 Mayo 2010, 20:25 PM
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.
Título: Re: ayuda con codigo
Publicado por: andaluz en 11 Mayo 2010, 20:28 PM
es verdad, se me habia olvidado incrementar "j", por eso fallaba. gracias
Título: Re: ayuda con codigo
Publicado por: andaluz en 11 Mayo 2010, 20:54 PM
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");
                    }
                }
            }
        }
Título: Re: ayuda con codigo
Publicado por: andaluz en 12 Mayo 2010, 11:01 AM
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??
Título: Re: ayuda con codigo
Publicado por: Chuidiang en 12 Mayo 2010, 19:27 PM
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.



Título: Re: ayuda con codigo
Publicado por: andaluz en 13 Mayo 2010, 09:29 AM
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.