Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/11/2009, 15:48
casidus
 
Fecha de Ingreso: marzo-2007
Mensajes: 23
Antigüedad: 17 años, 10 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