10
respuestas

los resultados cambian según el orden en el que se escriban

Me parecía raro que si "alexis.setSalario(5000);" es decir, menos que "jimena.setSalario(10000);", el resultado de "contador" fuera mayor que el de "gerente". Bajé el repositorio y probé cambiar el orden de los argumentos y salió lo siguiente:

  • Si dejo el orden que sale en el tutorial, es decir:

      controlBonificacion.registrarSalario(diego);
      controlBonificacion.registrarSalario(jimena);
      controlBonificacion.registrarSalario(alexis);
    
          en consola sale:
          Cálculo actual: 100.0
          Cálculo actual: 10600.0
          Cálculo actual: 10800.0

*Pero si cambio el orden de los argumentos a, por ejemplo:

controlBonificacion.registrarSalario(alexis);
controlBonificacion.registrarSalario(jimena);
controlBonificacion.registrarSalario(diego);

    en consola sale:
    Cálculo actual: 200.0
    Cálculo actual: 10700.0
    Cálculo actual: 10800.0
  • O si cambio el orden de los argumentos a...:

      controlBonificacion.registrarSalario(jimena);
      controlBonificacion.registrarSalario(alexis);
      controlBonificacion.registrarSalario(diego);
    
          en consola sale:
          Cálculoactual: 10500.0
          Cálculoactual: 10700.0
          Cálculoactual: 10800.0

¿Por qué se da este error? Imagino que es por el orden en que lee los argumentos desde padre a hijo, pero el tema principal es ¿cómo se soluciona esto?

10 respuestas

Hola Hernán, como estás?

Gracias por compartir tu duda con nosotros, recuerda hacer un tópico para no repetir la duda.

Así es el orden de impresión de la información va a ser de acuerdo a los atributos, el orden de los objetos y valores que les hayas asignado.

Saludos!

Si tienes alguna duda sobre el contenido de los cursos, estaremos aquí para ayudarte.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Perdón, es que publiqué dónde no era por error y no encontré alguna opción para borrar el tópico.

Por otro lado, mi consulta es porque cada argumento está asociado a formulas diferentes, en teoría, que deberían arrojar los mismos valores sin importar el orden de ejecución, ya que en el programa lo que se calcula es una "bonificación" diferente para cada persona según su rango o categoría. Por eso escribí:

Me parecía raro que si "alexis.setSalario(5000);" es decir, menos que "jimena.setSalario(10000);", el resultado de "contador" fuera mayor que el de "gerente"

PD: también me gustaría saber cómo puedo borrar un tópico.

Hola Hernan, como estás?

Gracias por compartir tu duda con nosotros.

Infelizmente la opción de borrar los tópicos no está habilitada para los alumnos.

Con respecto a la duda del código, no me compartiste tu proyecto pero imagino que a cada empleado se le descuenta o tiene una operación diferentes de acuerdo a su cargo, categoría o algún atributo.

Espero haberte podido ayudar, saludos!

Si tienes alguna duda sobre el contenido de los cursos, estaremos aquí para ayudarte.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Hola Hernan, Funcionario, Gerente y Contador, cada uno de ellos ya tiene estipulado en sus clases su bonificacion que le corresponde a cada uno, en la clase ControlBonificacion solo se lleva un control de las bonificaciones, el método registrarSalario() lo que hace es sólo sumar las bonificaciones y las va imprimiendo, por ejemplo:

cuando vos pones: ControlBonificacion.registrarSalario(jimena) vamos a suponer que ella es un Gerente y su bonificacion es de 1000 entonses el código lo que va a hacer es sumar la Bonificacionde Gerente con la variable suma q inicializa en cero y al resultado lo imprime que en este caso sería 1000 entonses si luego agregas a un Funcionario que su bonificacion es de 200 por ejemplo lo que va hacer es sumar los 1000 + 200 y va a imprimir el resultado(1200) y en consola te quedaría

calculoactual 1000 calculoactual 1200

y obviamente si vos lo invertis y pones primero Funcionario y luego Gerente te va a quedar

calculoactual 200 calculoactual 1200

pero lo único que hace es sumar las bonificaciones de una en una y va imprimiendo sus resultados

si vos queres ver directamente el resultado de la suma total de todas las bonificaciones ya tenes que hacerle un pequeño cambio al código

espero haber podido ser de ayuda, Saludos!!

Hernán, tengo tu misma duda y no veo que se resuelva en los otros posteros, el problema es la logica del calculo, matematicamente no resuelve el ejercicio. No tengo idea de cómo se soluciona, espero que más adelante en el curso den la solución

Hola Maria, arriba ise una explicación, porque estoy viendo que no están entendiendo lo que hace el código, cualquier cosa explícame bien tu duda y intentare ayudarte

Lo que ocurre, Nahuel, es que los resultados no deberían variar según el orden en el que se ejecuten, sino que deberían dar siempre los mismos resultados. Diego tendría que dar X + 200,

Jimena X + X,

y Alexis X + X * 0,1.

pero en lugar de entregar esos valores, por algún motivo, los resultados cambian según como estén en el orden de ejecución.

Hola Hernan es que no estas entendiendo, si vos cambias el orden, los valores tienen que cambiar, menos el último, que viene a ser la suma total de las 3 bonificaciones y te explico

supongamos que las bonificaciones de: Gerente = 500 Contador = 200 Funcionario = 100

entonses cuando se llama al método registrarSalario ()

ControlBonificacion.registrarSalario(Gerente); ControlBonificacion.registrarSalario(Contador); ControlBonificacion. registrarSalario(Funcionario);

el código se lee de arriba hacia abajo entonses empieza empieza por Gerente q es el q esta primero y lo que hace el método es sumar la bonificaciones, entonses la variable "suma" se inicializa en cero y se suma con la bonificacion de Gerente y el resultado se prime en consola

suma = suma + Gerente;

0 + 500 = 500 y se imprime en consola 500

y ahora la variable "suma" pasa a valer 500

y después viene Contador y realiza la misma acción solo que la variable suma ahora vale 500

suma = 500;

suma = suma + contador;

500 + 200 = 700 y se imprime en consola 700

y ahora la variable "suma" vale 700

y por ahora por último viene funcionario

suma = 700;

suma = suma + Funcionario;

700 + 100 = 800 y se imprime en la consola 800

entonses en consola va a salir imprimido

500 700 800

porque el método lo q hace es ir sumando las bonificaciones y las va imprimiendo, el valor 800 es la suma total de las bonificaciones de Gerente, Contador y Funcionario si vos cambias el orden, los valores imprimidos cambian por que se van imprimiendo los valores a medida que se van sumando, pero la suma total siempre será la misma

Hola Rosa, muchas gracias por tu pronta explicación, entiendo perfectamente el código, que va arrastrando la bonificación de cada funcionario y las va sumando al suiguente funcionario. Lo que planteo es que deberían aspecificar si es un calculo de remuneraciones o un calculo de de gasto en cuenta pues se presata paraconfusiones: ya que si es para calculo de remuneraciones de cada trabajador no funciona (se estaria pagando extra a cada funcionario que se va añadiendo al código), pero para estimación de gasto de cuenta podria funcionar ya que indicaria que provisión debo tener en cuenta item pagó bonificación general de la empresa... Muchas gracias por tu paciencia

Hola Maria si es lo segundo es para llevar como un control de finanzas de los gastos, en este caso solo se controla las bonificaciones, el profesor antes de escribir la clase ControlBonificacion lo menciona, tal ves lo pasaste por alto por eso tenias esa duda de para que servía el código exactamente...me alegro el haber podido ayudarte con tu duda, que tengas un buen dia