Polimorfismo comparar mes de objeto con mes actual

Espero que muy bien. Disculpa mi molestia pero resulta que te quiero realizar una consulta sobre como puedo comparar el mes de la inicialización de un objeto con el mes actual del sistema.
Resulta que estoy trabajando en una aplicación de calculo de sueldos de diferentes empleados y lo estoy realizando a través de polimorfismo.
Creo una composición entre la superclase Empleado y una Clase Fecha para establecer la fecha de nacimiento del empleado.
En la superclase declaro la variable fecha nacimiento del tipo Fecha. En el main creo los objetos Fecha e inicializo el objeto Empleado con el objeto Fecha como la fecha de nacimiento, así:
Fecha nacimientoAsalariado = new Fecha(5,12,1984);
Empleado e = new EmpleadoAsalariado("Pablo","Gomez","44-44-333",nacimientoAsalariado,1560.20);
Y tengo que realizar un incremento de 100 si el mes de la fecha de nacimiento del empleado consiste con el mes actual.
Tengo en la clase Fecha un método mediante el cual obtengo el mes que sería el mes de la fecha de nacimiento del empleado.
Mi comparación en el main para realizarlo a través del polimorfismo es la siguiente:
Empleado empleados[] = new Empleado[2];
empleados[0] = e;
empleados[1] = eph;
for(Empleado empleadoActual : empleados)
{
System.out.println(empleadoActual);
if(empleadoActual.obtenerFechaNacimiento().obtenerMes() == ahoraCal.get(Calendar.MONTH) )
{
System.out.println();
Pero resulta que siempre me imprime el renglón aunque yo inicialice el objeto Empleado con un mes distinto al actual.
Como puedo realizar la comparación entre el mes de la fecha de nacimiento y el mes actual del sistema para incrementar en 100 el sueldo.

1 respuesta

Respuesta
1
No puedo hacer una apreciación correcta de su código puesto que no tengo todo completo, puede haber una parte en los métodos de obtención de las fechas y en la clase ahoraCal, por lo cual le recomiendo que ud misma haga las pruebas a su programación, antes de hacer la comparación de la fecha actual con la fecha del empleado imprima por consola las 2 fechas y así vera cual es la que esta errada y corregir el problema.
Por otro lado le recomiendo no usar la clase ahoraCal ya que imagino que debe tener una herencia a Calendar, pruebe usando la clase Calendar pura, creando una instancia y comparando la los métodos de obtención de fecha de nacimiento y obtención de mes (una vez verificado que están bien programados) con la instancia de Date, específicamente con el método getMotnth(), y con eso tiene el problema resuelto.
______
Haciendo una comparación entre Calendar, GregorianCalendar y Date, la ganadora fue Date, por lo siguiente mire ud
Tengo estas lineas de código
System.out.println(GregorianCalendar.MONTH);
System.out.println(Calendar.MONTH);
Date fecha=new Date(); System.out.println(fecha.getMonth() + 1 ) ;
____
Las cuales dieron los siguientes resultados
2
2
12
_____________
Esto muestra que la forma correcta de usar la fecha actual es con Date, de la librería Útil, no la de SQL.
Espero haberla ayudado y cualquier consulta estoy para eso, para ayudar.
Muchas gracias dimondi21 funciono perfecto con Date, disculpa mi atrevimiento pero quisiera realizarte una consulta sobre mi aplicación para ello adjuntare las clases para que me entiendas mejor.
Superclase
package Empleado;
/**
*
* @author Administrador
*/
public abstract class Empleado {
private String primerNombre;
private String apellidoPaterno;
private String numeroSeguroSocial;
private Fecha fechaNacimiento;
public Empleado(String nombre, String apellido, String nss, Fecha fn)
{
primerNombre = nombre;
apellidoPaterno = apellido;
numeroSeguroSocial = nss;
fechaNacimiento = fn;
}
public void establecerNombre(String nombre)
{
primerNombre = nombre;
}
public String obtenerPrimerNombre()
{
return primerNombre;
}
public void establecerApellido(String apellido)
{
apellidoPaterno = apellido;
}
public String obtenerApellidoPaterno()
{
return apellidoPaterno;
}
public void establecerNumeroSeguroSocial(String nss)
{
numeroSeguroSocial = nss;
}
public String obtenerNumeroSeguroSocial()
{
return numeroSeguroSocial;
}
//método abstracto sobrescrito por las subclases
public abstract double ingresos();
public Fecha obtenerFechaNacimiento()
{
return fechaNacimiento;
}
public String toString()
{
return String.format("%es %es\nnumero de seguro social: %es\nfecha nacimiento: %es", obtenerPrimerNombre(),obtenerApellidoPaterno(),obtenerNumeroSeguroSocial(),fechaNacimiento);
}
} //fin de la superclase abstracta Empleado
Subclase
package Empleado;
/**
*
* @author Administrador
*/
public class EmpleadoPorHoras extends Empleado{
private double sueldo;
private double horas;
public EmpleadoPorHoras(String nombre, String apellido, String nss,Fecha fn, double salario, int h)
{
super(nombre,apellido,nss,fn);
establecerSueldo(salario);
establecerHoras(h);
}
public void establecerSueldo(double es)
{
if(es < 0.0)
sueldo = 0.0;
else
sueldo = es;
}
public double obtenerSueldo()
{
return sueldo;
}
public void establecerHoras(int h)
{
if(h >= 0.0 && h <= 168.0)
horas = h;
else
horas = 0.0;
}
public double obtenerHoras()
{
return horas;
}
public double ingresos()
{
if(obtenerHoras() <= 40) //no hay tiempo extra
return obtenerSueldo() * obtenerHoras();
else
return 40 * obtenerSueldo() + (obtenerHoras() - 40) * obtenerSueldo()* 1.5;
}
public String toString()
{
return String.format("%es %es\n%es:$%,.2f; %es: %,.2f", "empleado por horas",super.toString(), "sueldo por hora",obtenerSueldo(),"horas trabajadas",obtenerHoras());
}
}
Resulta que a EmpleadoPorHoras le tengo que aumentar en $100 el sueldo si es el mes de su cumpleaños, en mi main está:
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Date fecha = new Date();
Fecha nacimientoAsalariado = new Fecha(5,12,1984);
Fecha nacimientoPorHoras = new Fecha(15,12,1987);
Empleado e = new EmpleadoAsalariado("Pablo","Gomes","44-44-333",nacimientoAsalariado,1560.20);
Empleado eph = new EmpleadoPorHoras("Yamila","Ávila","33-222-444",nacimientoPorHoras,16.75,40);
Empleado empleados[] = new Empleado[2];
empleados[0] = e;
empleados[1] = eph;
for(Empleado empleadoActual : empleados)
{
System.out.println(empleadoActual);
if(empleadoActual.obtenerFechaNacimiento().obtenerMes() == fecha.getMonth() + 1 )
{
if (empleadoActual instanceof EmpleadoAsalariado )
{
EmpleadoAsalariado empleado = (EmpleadoAsalariado) empleadoActual;
double es = empleado.obtenerSalarioSemanal();
empleado.establecerSalarioSemanal(100.00 + es);
}
if (empleadoActual instanceof EmpleadoPorHoras )
{
EmpleadoPorHoras empleadoPH = (EmpleadoPorHoras) empleadoActual;
double n = empleadoPH.obtenerSueldo();
empleadoPH.establecerSueldo(n + 100);
}
}
System.out.printf("ingresos: $%,.2f\n\n", empleadoActual.ingresos());
}
}
}
Y al crear el objeto de esa subclase no logro aumentar el sueldo en 100, mi pantalla me dice
run:
empleado asalariado: Pablo Gomez
numero de seguro social: 44-44-333
fecha nacimiento: 5/12/1984
sueldo: $1.560,20
ingresos: $1.660,20
empleado por horas Yamila Ávila
numero de seguro social: 33-222-444
fecha nacimiento: 15/12/1987
sueldo por hora:$16,75; horas trabajadas: 40,00
ingresos: $4.670,00
BUILD SUCCESSFUL (total time: 1 second)
Me aumenta a 4 670 y si establezco el salario en n me imprime 670 de multiplicar los 16,75 * 40. Yo había puesto en ese if la declaración del System.out.printf que está en la linea final del for y break pero siento que hago trampa, así si logro sumar los 670 a 770.
Disculpa mi ignorancia y mil gracias por tu ayuda!!!
Manda el proyecto a [email protected] para ayudarte, ya que realmente se hace imposible viendo solo esta pagina.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas