Foros del Web » Programación para mayores de 30 ;) » Java »

ayuda con programa java, no me salen bien los dias

Estas en el tema de ayuda con programa java, no me salen bien los dias en el foro de Java en Foros del Web. hola tengo un problema, tengo que hacer un programa que me calcule la vida laboral, el usuario ademas de introducir unos datos tiene que poner ...
  #1 (permalink)  
Antiguo 05/11/2009, 15:48
 
Fecha de Ingreso: marzo-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
ayuda con programa java, no me salen bien los dias

hola tengo un problema, tengo que hacer un programa que me calcule la vida laboral, el usuario ademas de introducir unos datos tiene que poner la fecha de ingreso, y luego se pone si quiere la fecha del sistema o manual, y al final lo muestra en dias, meses y años, con la limitacion que solo podemos usar if/else o como mucho switc, osea sin bucles por que es un ejercicio de clase en el que me he atascado desde hace un tiempo, por que me calcula bien los años pero los meses a veces falla y los dias tambien, me podeis ayudar????
el codigo que tengo es:
Código:
import cs1.Keyboard;
   import java.lang.String;
   import java.text.*;
   import java.util.*;



    public class EX1  {
       public static void main(String args[]) {
       
         String nom1,nom2,nom3,sec1,sec2,sec3,data1,data2,data3;
         int num1,num2,num3,num4;
         int dia1,dia2,dia3,mes1,mes2,mes3,any1, any2,any3;
         String data,sistem, comprobar = "n" ;
         int dia,mes,anno,anyfin1=0,anyfin2=0,anyfin3=0,mesfin1,mesfin2,mesfin3;
         int diafinal1=0, diafinal2=0,diafinal3=0;
         System.out.print("Entra el nom de la primera persona: ");
         nom1 = Keyboard.readString();
         System.out.print("Entra la seccio de la primera persona: ");
         sec1 = Keyboard.readString();
         System.out.print("Entra la data d'alta de la primera persona:(dd/mm/aaaa) ");
         data1 = Keyboard.readString();
         System.out.print("Entra el nom de la segona persona: ");
         nom2 = Keyboard.readString();
         System.out.print("Entra la seccio de la segona persona: ");
         sec2 = Keyboard.readString();
         System.out.print("Entra la data d'alta de la segona persona: (dd/mm/aaaa) ");
         data2 = Keyboard.readString();
         System.out.print("Entra el nom de la tercera persona: ");
         nom3 = Keyboard.readString();
         System.out.print("Entra la seccio de la tercera persona: ");
         sec3 = Keyboard.readString();
         System.out.print("Entra la data d'alta de la tercera persona: (dd/mm/aaaa) ");
         data3 = Keyboard.readString();
       
       //separacion fechas
       //primera persona
         num1 = data1.length();
         dia1=Integer.valueOf(data1.substring(0,2)).intValue() ;
         mes1=Integer.valueOf(data1.substring(3,5)).intValue() ;
         any1=Integer.valueOf(data1.substring(6   ,10)).intValue() ;
         //segunda persona
         num2 = data2.length();
         dia2=Integer.valueOf(data2.substring(0,2)).intValue() ;
         mes2=Integer.valueOf(data2.substring(3,5)).intValue() ;
         any2=Integer.valueOf(data2.substring(6   ,10)).intValue() ;
         //tercera persona
         num3 = data3.length();
         dia3=Integer.valueOf(data3.substring(0,2)).intValue() ;
         mes3=Integer.valueOf(data3.substring(3,5)).intValue() ;
         any3=Integer.valueOf(data3.substring(6   ,10)).intValue() ;
         System.out.print("Vol utilitzar la data del sistema? s/n ");
         sistem = Keyboard.readString();
         if (sistem.equals(comprobar)){
         //si quiere poner la fecha a mano
            System.out.print("Entri la data de amb la que vol fer el calcul: (dd/mm/aaaa) ");
            data = Keyboard.readString();
         
         
            num4=data.length();
            dia = Integer.valueOf(data.substring(0,2)).intValue() ;
            mes = Integer.valueOf(data.substring(3,5)).intValue() ;
            anno = Integer.valueOf(data.substring(6,10)).intValue() ;
         }
         else{
         
         
         //fecha actual
            Date date = new Date();
            String formato4 = new String("dd/MM/yyyy");
            SimpleDateFormat formatoSimple = new SimpleDateFormat(formato4);
            data = formatoSimple.format(date);
            num4=data.length();
            dia = Integer.valueOf(data.substring(0,2)).intValue() ;
            mes = Integer.valueOf(data.substring(3,5)).intValue() ;
            anno = Integer.valueOf(data.substring(6,10)).intValue() ;}
           
            //calcular años
         if (any1 >anno)
            System.out.print("L'any actual ha de ser mes gran que el d'alta");
         else
           
           
            anyfin1= anno - any1;
         if (any2 >anno)
            System.out.print("L'any actual ha de ser mes gran que el d'alta");
                     else
               anyfin2= anno - any2;
         if (any3 >anno)
            System.out.print("L'any actual ha de ser mes gran que el d'alta");
                     else
               anyfin3= anno - any3;
         //calcular mes
         if (mes1>mes){
            mesfin1=0;}
         else{
            mesfin1= mes - mes1 -1;}
         if (mes2>mes){
            mesfin2 =0;}
         else{
            mesfin2= mes - mes2-1;}
         if(mes3>mes){
            mesfin3 =0;}
         else{
            mesfin3= mes - mes3-1;}
         //               dia_total1 = (29 - dia_alta11) + (int)Math.floor((any_actual0 - any_alta11)/4) ;

         //calcular dia primero
         double val1 = any1 %100;
         double val11 = any1 %400;
       
         if ((val1 ==0)&&(val11==0)&&(mes1==02)) {
            diafinal1= (29- dia1)+(int)Math.floor(anyfin1/4);
         }
         else{
            if ((mes1==01)||(mes1==03)||(mes1==05)||(mes1==07)||(mes1==8)||(mes1==10)||(mes1==12))
            {
               diafinal1 = 31- dia1+(int)Math.floor(anyfin1/4);}
            else{
               if ((mes1==04)||(mes1==06)||(mes1==9)||(mes1==11))  {
                  diafinal1 = 30 - dia1+(int)Math.floor(anyfin1/4);  }
               else{
                  double valor1 = any1%4;
                  if (valor1 == 0){
                     diafinal1 = 29 - dia1+(int)Math.floor(anyfin1/4);}
                  else
                     diafinal1=28-dia1+(int)Math.floor(anyfin1/4);}
            }}
           
            // calcular dia segundo
         double val2 = any2 %100;
         double val21 = any2%400;
       
         if ((val2 ==0)&&(val21==0)&&(mes2==02)) {
            diafinal2= 29- dia2;
         }
         else{
            if ((mes2==01)||(mes2==03)||(mes2==05)||(mes2==07)||(mes2==8)||(mes2==10)||(mes2==12))
            {
               diafinal2 = 31- dia2+(int)Math.floor(anyfin2/4);}
            else{
               if ((mes2==04)||(mes2==06)||(mes2==9)||(mes2==11))  {
                  diafinal2 = 30 - dia2+(int)Math.floor(anyfin2/4);  }
               else{
                  double valor23 = any2%4;
                  if (valor23 == 0){
                     diafinal2 = 29 - dia2+(int)Math.floor(anyfin2/4);}
                  else
                     diafinal2=28-dia2+(int)Math.floor(anyfin2/4);}
            }}
                  // calcular dia tercero
         double val3 = any3 %100;
         double val31 = any3%400;
       
         if ((val3 ==0)&&(val31==0)&&(mes3==02)) {
            diafinal3= 29- dia3+(int)Math.floor(anyfin3/4);
         }
         else{
            if ((mes3==01)||(mes3==03)||(mes3==05)||(mes3==07)||(mes3==8)||(mes3==10)||(mes3==12))
            {
               diafinal3 = 31- dia3+(int)Math.floor(anyfin3/4);}
            else{
               if ((mes3==04)||(mes3==06)||(mes3==9)||(mes3==11))  {
                  diafinal3 = 30 - dia3+(int)Math.floor(anyfin3/4);  }
               else{
                  double valor32 = any2%4;
                  if (valor32 == 0){
                     diafinal3 = 29 - dia3+(int)Math.floor(anyfin3/4);}
                  else
                     diafinal3= 28-dia3+(int)Math.floor(anyfin3/4);}
            }}
           
            
            //salida por pantalla
            
         System.out.println("nom"+"            " + "seccio"+"            " + "Data sd'alta"+"            "+"vida laboral");
         System.out.println(nom1+"      "+sec1+"      "+data1+"      "+diafinal1+" dies "+mesfin1+" mesos "+anyfin1+" anys ");
         System.out.println(nom2+"      "+sec2+"      "+data2+"      "+diafinal2+" dies "+mesfin2+" mesos "+anyfin2+" anys ");
     
         System.out.println(nom3+"      "+sec3+"      "+data3+"      "+diafinal3+" dies "+mesfin3+" mesos "+anyfin3+" anys ");
     
     
     
     
       
       
       
       
      }
   }
me podeis decir como hacer los dias????
esk no me salen bien, es por que no todos los años tienen los mismos dias.
se que se podria hacer con un bucle o con el gregorian calendar pero es que en este ejercicio no nos lo dejan hacer y a mi ya no se me ocurre nada

gracias por todo
  #2 (permalink)  
Antiguo 06/11/2009, 03:16
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: ayuda con programa java, no me salen bien los dias

Wenas

El mes en java empieza por 0. 0=Enero, 1=Febrero,..., 11=Diciembre.

Saludos.
  #3 (permalink)  
Antiguo 06/11/2009, 03:23
 
Fecha de Ingreso: marzo-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: ayuda con programa java, no me salen bien los dias

no, si los meses me funcionan bien, el problema es c alcular los dias pk no todos lo años tienen 365 dias ya que ahy años que febrero tiene 29 dias, con el georgian calendar se haria facil pero no se puede hacer en este ejercicio y la verdad es que not tengo mas ideas

gracias por todo
  #4 (permalink)  
Antiguo 06/11/2009, 03:28
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: ayuda con programa java, no me salen bien los dias

No. Los meses no te funcionan bien, porque no estra por el if correspondiente.

Código:
if ((mes3==04)||(mes3==06)||(mes3==9)||(mes3==11))  {
En realidad es

Código:
if ((mes3==3)||(mes3==5)||(mes3==8)||(mes3==10))  {
Estas diciendo que cuando el mes es diciembre, tiene 30 dias. Nos estas quitando la nochevieja, macho.

Lo del año bisiesto es otra historia. Sin embargo, hay pseudocodigos para obtenerlo, no en vano GregorianCalendar, se limita a usar eso. Buscalo en google

Saludos.
  #5 (permalink)  
Antiguo 06/11/2009, 03:38
 
Fecha de Ingreso: marzo-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: ayuda con programa java, no me salen bien los dias

lo del mes es verdad no me habia fijado, lo habre cambiado sin querer. lo de los dias, ja se que se usa lo del georgiancalendar, el problema es que no nos dejan usarlo, hay que hacerlo a mano, se te ocurre como??????


gracias por todo
  #6 (permalink)  
Antiguo 06/11/2009, 04:06
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: ayuda con programa java, no me salen bien los dias

A ver.

GregorianCalendar no implementa nada nuevo. El codigo para saber si un año es o no bisiesto, existe michisimo antes de que existiera java.

GregorianCalendar facilita eso ya que no tienes que implementarlo tu. Ya esta en sus tripas.

Busca en google un pseudocodigo para calcular si un año es o no bisiesto, y lo implementas en java.

No es tan dificil.

Saludos.

PD. Tienes que intentarlo. Es un ejercicio de clase. Si te lo han pedido que lo hagas asi, es para que te rompas un poco la cabeza. Es el mejor modo de aprender.
  #7 (permalink)  
Antiguo 06/11/2009, 04:10
 
Fecha de Ingreso: marzo-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: ayuda con programa java, no me salen bien los dias

pues puedo ser muy tonto pero no encuentro nada, sino, no habri posteado mi problema.
ya llevo dos semanaas buscando y sigo atascado

gracias por todo
  #8 (permalink)  
Antiguo 06/11/2009, 05:44
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: ayuda con programa java, no me salen bien los dias

Pues busca año bisiesto en google y ya esta.

Te saldran 200000000000000 paginas.

y luego no necesitas hacer mas que

si es bisiesto
dias = 366
sino
dias = 365

De momento yo me olvidaria de 3 fechas hazte un programita que te calcule los dias entre dos fechas puestas a pelo. Por ejemplo hay 425 dias entre la fecha1 y la fecha de hoy

Una vez tengas bien calculados los dias (ahí tendrías que jugar con los bisiestos), calcula los meses y los años, es decir, descompones esos 425 dias de antes en años, meses y dias.

Y luego completa tu ejercicio.

Curratelo un poco, hombre.

PD. De todos modos, que sepas que tu programa esta mucho mas currado, el programa de calculo de vida laboral no se rompe tanto la cabeza, ya que presupone siempre 30 dias por mes y le importa un carajo que sea año bisiesto o no.
  #9 (permalink)  
Antiguo 06/11/2009, 06:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: ayuda con programa java, no me salen bien los dias

ja pero necesito saber todos los años bisiestos que hay entre las dos fechas, cosa que seria muy facil si me dejasen usar bucles pero de momento no nos dejan, y lo de los dias que tiene un mes aqui si que importan por que es un ejercicio para clase, no nada para el trabajo, estamos empezando(algunos) a programar con java y por eso nos limitan lo k podemos usar

sino este ejercicio ya lo habria acabado hace tiempo pk seria mas facil
gracias por todo
  #10 (permalink)  
Antiguo 06/11/2009, 13:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: ayuda con programa java, no me salen bien los dias

Hola,

Cita:
Iniciado por casidus Ver Mensaje
... ja pero necesito saber todos los años bisiestos que hay entre las dos fechas, ...
Un año es bisiesto si es divisible por 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.

http://es.wikipedia.org/wiki/A%C3%B1o_bisiesto

Saludos,
  #11 (permalink)  
Antiguo 06/11/2009, 14:39
 
Fecha de Ingreso: marzo-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: ayuda con programa java, no me salen bien los dias

ok gracias, ya lo he solucionado en cuanto tenga todo acabado colgare el codigo por si alguien tiene el mismo problema
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:38.