Program to know the salary of a person who works overtime

0

The code to know the salary of a person who is paid overtime, after the 40th hour is paid as follows: ((paymentx hour * worked hours) + paymentxhora / 2 + paymentxhora) I mean that the employee after the 41st hour they pay as normal time plus half of a normal time, it does not work, no matter what the problem is, this is the code:

import java.util.Scanner;
class horasextras {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner entrada= new Scanner(System.in);
    long horasTrabajadas;
    long pagoxhora;
    long salario;

    System.out.print("Ingrese las horas trabajadas: ");
    horasTrabajadas=entrada.nextLong();
    System.out.print("Ingrese el pago por horas: ");
    pagoxhora=entrada.nextLong();

    if(horasTrabajadas<=40){
    pagoxhora=pagoxhora;
    }
    else{
    pagoxhora= (pagoxhora/2)+pagoxhora;
    }
    salario= horasTrabajadas*pagoxhora;
    System.out.println("El salario es de: "+salario);
}

}

This reflects me on the console:

  

Enter the hours worked: 41

     

Enter the payment for hours: 10

     

Salary is: 425

It should be: 415

    
asked by Jonathan Raudales 19.03.2018 в 18:36
source

4 answers

0

The formula you propose in the question does not match the explanation you make later, that's why it gives you the result that it is not. This code gives the result you are looking for.

 public static void main(String[] args) {
    Scanner entrada= new Scanner(System.in);
    long horasTrabajadas;
    long pagoxhora;
    long salario;

    System.out.print("Ingrese las horas trabajadas: ");
    horasTrabajadas=entrada.nextLong();

    System.out.print("Ingrese el pago por horas: ");
    pagoxhora=entrada.nextLong();

    if(horasTrabajadas > 40){
        //calcula el salario de las primeras 40 horas
        long primerasHoras = 40 * pagoxhora;
        long precioHorasExtra = (pagoxhora/2)+pagoxhora;
        //calcula el salario de las horas extra
        long salarioHorasExtra = (horasTrabajadas - 40) * precioHorasExtra;

        salario = primerasHoras + salarioHorasExtra;//suma las dos cantidades
    }
    else{
        //menos de 40 horas trabajadas
        salario = pagoxhora * horasTrabajadas;
    }

    System.out.println("El salario es: " + salario);
}
    
answered by 19.03.2018 / 20:46
source
1

Let's review your code:

pagoxhora=entrada.nextLong(); //pedimos el pago por hora
if(horasTrabajadas<=40) // si las horas son menores a 40
    {pagoxhora=pagoxhora;} //hacemos que pagoxhora sea igual a pago por hora??? 
                           // para que??
else 
    {pagoxhora= (pagoxhora/2)+pagoxhora;} //o sea, si trabajo mas de 40 que cosa? 
                                          //no era el resto de lo que sobro de 40?
salario= horasTrabajadas*pagoxhora; //aca calculas el salario, cuan cualquier pago por hora.

Now ... first let's order the algorithm.
We want the payment per hour, and in reality there are 2 payments per hour .. one for less than 40, and another for each hour that exceeds 40 ... then ... in pseudocodigo it would be something like this:

  • We ask for the payment per hour
  • we calculate the payment for extra hour (payment per hour * 1.5)
  • We calculate the hours worked above 40
  • We calculate the salary by working hours up to 40 * payment per hour + hours worked above 40 * payment per extra hour

and in code .. it would be something like this:

long pagoxhoraextra = 0;
int cantidadhorasextra = 0;
....
pagoxhora=entrada.nextLong();
pagoxhoraextra = (pagoxhora/2)+pagoxhora; // es lo mismo que pagoxhora * 1.5
if(horasTrabajadas>40)
{
    cantidadhorasextra = horasTrabajadas-40;
}
salario= (horasTrabajadas-cantidadhorasextra)*pagoxhora+cantidadhorasextra *pagoxhoraextra ;
    
answered by 19.03.2018 в 19:42
1

I am new to Java and I am learning how to program in this way, hopefully this code will work for you. Greetings.

package horasextra;
import javax.swing.JOptionPane; //libreria para usar mensajes de Dialogos
public class HorasExtra {
    private void ingresarDatos(){//metodo para pedir los datos
        long horasTrabajadas;
        long pagoPorHora,total;
        horasTrabajadas=Long.parseLong(JOptionPane.showInputDialog("Cuantas horas trabajo: "));//Pedimos las horas trabajadas por medio de un cuadro de dialogo.
        pagoPorHora=Long.parseLong(JOptionPane.showInputDialog("Pago por Hora Trabajada: ")); //Pedimos el pago por medio de un cuadro de dialogo.
        total=calcularTotal(horasTrabajadas,pagoPorHora);//enviamos los datos al metodo calcularTotal() para realizar las operaciones
        JOptionPane.showMessageDialog(null,"EL pago es de: "+total);
    }
    private long calcularTotal(long horasTra,long pagoHora){
    /*En este nuevo metodo resiviremos las horas trabajas y el pago por Hora y las definimos como horasTra y pagoHora para poder realizar las operaciones necesarias. */

        long pagoParcial,extra,pagoCompleto;
        if(horasTra>40){//si es mayor a 40
            pagoParcial=(40*pagoHora);//pago por las primeras 40 horas
            extra=(pagoHora+(pagoHora/2))*(horasTra-40); // pago por horas extras
            pagoCompleto=pagoParcial+extra;//sumas los dos pagos
            }
        else{
            pagoCompleto=horasTra*pagoHora; //sueldo por 40 o menos horas trabajadas.
        }
            return (pagoCompleto);   //retornamos pagoCompleto y se guarda en la variable total del metodo ingresarDatos().
    }
    public static void main(String[] args) {
        HorasExtra obj = new HorasExtra();//Creamos un objetos llamado obj para poder ingresar a los metodos de esta clase.
        obj.ingresarDatos();//ingresamos al metodo principal para obtener el resultado
    }

}
    
answered by 19.03.2018 в 22:44
0

To not change much your code there I send you a possible solution. Basically the error is that you compute the entire salary to 1.5 instead of just what you exceed 40 hours. Greetings.

    import java.util.Scanner;
    class horasextras {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner entrada= new Scanner(System.in);
        long horasTrabajadas;
        long pagoxhora;
        long salario;
    System.out.print("Ingrese las horas trabajadas: ");
    horasTrabajadas=entrada.nextLong();
    System.out.print("Ingrese el pago por horas: ");
    pagoxhora=entrada.nextLong();

    if(horasTrabajadas<=40){
    salario= horasTrabajadas*pagoxhora;//salario normal
    }
    else{
    salario= (horasTrabajadas-40)*pagoxhora*1.5 + 40*pagoxhora;
    //este salario refleja el pago normal x 40hs + las horas extras que pagan    
    //1,5 veces
    }
    System.out.println("El salario es de: "+salario);
}

}
    
answered by 20.03.2018 в 03:55