JSP (Java Server Page) - ayuda con programa Java

 
Vista:

ayuda con programa Java

Publicado por Cristian Berzan (1 intervención) el 17/11/2012 00:07:31
Hola, chicos bueno este es mi primer mensaje que cuelgo en este foro y me gustaría a ver si algún experto en tema de programación con Java me puede echar un cable. Veréis estoy estudiando un grado superior de Sistema Informáticos en Redes en Barcelona y estoy estancado en unos errores que me da mi programa.
Os explico: se trataría de un programa donde tú insertas dos fechas (con días,meses y años) y hacer la resta. O sea si yo inserto el 15/11/1992 y el 15/11/2012 me diga que he vivido 20 años, 0 mese y 1 día (cuento el día vivido). Hasta allí todo lo he hecho bien, mi problema es cuando le meto unas determinadas fechas me bailan un poco los días. Estas fechas en concreto son: 24/02/2000 como fecha inicial (en mi programa está como fecha_alta) y 12/01/2007 como fecha final (en mi programa como fecha_actual), también está la fecha 18/05/1970 y 04/12/2010. La primera fecha debería dar 6 años, 10 meses y 20 días vividos y la segunda 40 años, 6 meses y 17 días. Y a mi me da la primera 6 años,10 meses y 29 días y la segunda 42 años, 6 meses y 31 días.
También quiero que me imprima por pantalla un error que diga que fecha_alta no puede ser mayor que fecha_actual y la fecha que introduzco es: fecha_actual 15/01/2012 y fecha_alta 24/02/2012.
Con otras fechas que he probado me da bien todo, hasta me sale el error mencionado antes, son estas las fechas con las que me estoy volviendo loco (que son justamente las que preguntara el profesor) porque no me salen. Si alguien me puede ayudar se lo agradecería muchísimo .
Cabe decir que lo he hecho todo con If/Else ya que aún no he estudiado la función calendar y no la se utilizar, mi profesor ha insistido en que todo lo hemos de hacer con If / Else.

A continuación tenéis el código:

import cs1.Keyboard;
import java.text.SimpleDateFormat;
import java.util.Date;



public class Programaslongetivitat2
{
public static void main (String[] args)
{

String fecha_actual = "",fecha_alta,mes_actual,mes_alta,dia_actual,dia_alta,nombre,seccio,selector;
int anios,meses,dies=0,fecha_actual1,fecha_alta1,mes_actual1,mes_alta1,dia_actual1,dia_alta1,dias=0,dias_actual=0;
Date data = new Date();
SimpleDateFormat formato_fecha = new SimpleDateFormat("dd/MM/yyyy");

System.out.println("Quieres utilitzar la fecha del sistema? (s/n)");
selector = Keyboard.readString();

if (selector.equals("s")){
fecha_actual = formato_fecha.format(data);
System.out.println("La fecha actual es: " + fecha_actual);
}

else if (!selector.equals("n")){
System.out.print ("Error, no has puesto una s o una n");
}

if (selector.equals("n")){
System.out.print ("Introduce la fecha que quieres calcular (aa/bb/cccc): ");
fecha_actual = Keyboard.readString ();
}
if (selector.equals ("s") || selector.equals("n")){
System.out.print ("Introduce la fecha de alta del trabajador (aa/bb/cccc): ");
fecha_alta = Keyboard.readString ();
System.out.print ("Introduce el nombre del trabajador:");
nombre = Keyboard.readString ();
System.out.print ("Introduce la sección del trebajador:");
seccio = Keyboard.readString ();

if (!fecha_actual.substring(2,3).equals("/") || !fecha_alta.substring(2,3).equals("/"))
System.out.print ("Error, tiene que haver la barra porque el formato és aa/bb/cccc");
else if (!fecha_actual.substring(5,6).equals("/") || !fecha_alta.substring(5,6).equals("/"))
System.out.print ("Error, tiene que haver la barra porque el formato és aa/bb/cccc");

else if(fecha_actual.length() < 10 || fecha_actual.length() > 10)
System.out.print("Error, tiene que haver 10 caracteres");
else if(fecha_alta.length() < 10 || fecha_alta.length() > 10)
System.out.print("Error, tiene que haver 10 caracteres");


else{
mes_actual = fecha_actual.substring (3,5);
mes_actual1 = Integer.valueOf(mes_actual).intValue ();

mes_alta = fecha_alta.substring (3,5);
mes_alta1 = Integer.valueOf(mes_alta).intValue ();

dia_actual = fecha_actual.substring (0,2);
dia_actual1 = Integer.valueOf(dia_actual).intValue ();

dia_alta = fecha_alta.substring (0,2);
dia_alta1 = Integer.valueOf(dia_alta).intValue ();

fecha_actual1 = Integer.valueOf(fecha_actual.substring(6,10)).intValue();

fecha_alta1 = Integer.valueOf(fecha_alta.substring(6,10)).intValue ();

if ((fecha_actual1 < fecha_alta1) || ((fecha_actual1 < fecha_alta1) && (mes_actual1 < mes_alta1)) || ((fecha_actual1 < fecha_alta1) && (mes_actual1 < mes_alta1) && (dia_alta1 > dia_actual1)))
System.out.print ("Error,la fecha actual no puede ser mayor que la fecha de alta");

else{



if (mes_alta1 == 1)
dias = 31;
else if (mes_alta1 == 2)
if ((fecha_alta1 % 4 == 0) && ((fecha_alta1 % 100 != 0) || (fecha_alta1 % 400 == 0)))
//("El año es bisiesto");
dias = 29;
else
//"El año no es bisiesto";
dias = 28;
else if (mes_alta1 == 3)
dias = 31;
else if (mes_alta1 == 4)
dias = 30;
else if (mes_alta1 == 5)
dias = 31;
else if (mes_alta1 == 6)
dias = 30;
else if (mes_alta1 == 7)
dias = 31;
else if (mes_alta1 == 8)
dias = 31;
else if (mes_alta1 == 9)
dias = 30;
else if (mes_alta1 == 10)
dias = 31;
else if (mes_alta1 == 11)
dias = 30;
else if (mes_alta1 == 12)
dias = 31;

if (mes_actual1 == 1)
dias_actual = 31;
else if (mes_actual1 == 2)
if ((fecha_actual1 % 4 == 0) && ((fecha_actual1 % 100 != 0) || (fecha_actual1 % 400 == 0)))
//("El año es bisiesto");
dias_actual = 29;
else
//"El año no es bisiesto";
dias_actual = 28;

else if (mes_actual1 == 3)
dias_actual = 31;
else if (mes_actual1 == 4)
dias_actual = 30;
else if (mes_actual1 == 5)
dias_actual = 31;
else if (mes_actual1 == 6)
dias_actual = 30;
else if (mes_actual1 == 7)
dias_actual = 31;
else if (mes_actual1 == 8)
dias_actual = 31;
else if (mes_actual1 == 9)
dias_actual = 30;
else if (mes_actual1 == 10)
dias_actual = 31;
else if (mes_actual1 == 11)
dias_actual = 30;
else if (mes_actual1 == 12)
dias_actual = 31;


if (mes_actual1 > 12 || mes_alta1 > 12)
System.out.print ("Error, no puede haver mas de 12 meses");
else if (dia_actual1 > dias_actual || dia_alta1 > dias)
System.out.print ("Error, no se puede superar los dias de cada mes");

else{
//Anys:

anios = fecha_actual1 - fecha_alta1;

//Mesos:

if (mes_alta1 > mes_actual1){
meses = 12 - mes_alta1 + mes_actual1;
anios = anios - 1;
}
else if (mes_actual1 > mes_alta1)
meses = mes_actual1 - mes_alta1;
else
meses = 0;

//Dies:

if (mes_actual1 == mes_alta1){
if (dia_actual1 > dia_alta1)
dies = dia_actual1 - dia_alta1;

if (dia_actual1 < dia_alta1){
dies = dia_alta1 - dia_actual1;
anios = anios - 1;
}
else
dies = 0;
}
if (mes_actual1 > mes_alta1){
if (dia_actual1 > dia_alta1)
dies = dia_actual1 - dia_alta1;
else if (dia_alta1 > dia_actual1){
meses = meses - 1;
dies = dias - dia_alta1 + dia_actual1;
}
else
dies = 0;
}
else if (mes_alta1 > mes_actual1){
if (dia_actual1 > dia_alta1)
dies = dia_actual1 - dia_alta1;
else if (dia_actual1 < dia_alta1){
dies = dias - dia_alta1 + dia_actual1 ;
meses = meses - 1;
}
else
dies = 0;
}
dies = dies + 1;
System.out.print ("\n" + nombre + "\t\t" + seccio + "\t" + fecha_alta + "\t" + anios + " Años \t" + meses + " Meses \t" + dias + " Dias");

}
}
}
}
}
}

Muchas gracias a todo de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder