divinity02 Ответов: 1

Как заставить эту программу работать правильно


привет всем: я практиковался с этой программой расчета заработной платы уже очень давно, и за всю свою жизнь я просто не могу заставить ее дать мне правильный результат.

Я не получаю валовую зарплату, нетпей, вычет, чтобы дать правильный результат, он выводит ноль.

а еще нужно выводить сотрудников, которые получали самые высокие и самые низкие зарплаты. Этого я тоже не понимаю.

однажды я получил ошибку arrayindexoutofbound для одной из меток, где говорится, что нужно вывести код квалификации сотрудника. У меня был он в массиве, но с тех пор я удалил его из массива, и теперь он застрял после запроса фиксированной зарплаты сотрудника. может ли кто-нибудь помочь мне с этим, я имею в виду объяснить мне, где и чего мне здесь не хватает и чего я не делаю.

программа также должна генерировать общую зарплату для всех сотрудников, и это все, чего я не получаю. Итак, вот мои коды, которые я использовал

Что я уже пробовал:

public static double calGrossLecturer(double hrswrk, double payrate)
    {
        int i=0;
        
        double grosspay;
        
        grosspay = (hrswrk * 575) + 2500.00;
        
        return grosspay;
    }
    public static double calGrossRWorker(double hrswrk, double payrate)
    {
        int i=0;
        
        double grosspay;
        
        grosspay = (hrswrk * 325) + 1250.00;
        
        return grosspay;
    }
    public static double calDeductions(double NIS, double healthsurcharge)
    {
        int i=0;
        double deductions;
        
        deductions = (NIS + healthsurcharge);
        
        return deductions;
    }
    public static double calNetpay(double grosspay, double deductions)
    {
        int i=0;
        
        double netpay;
        
        netpay = (grosspay - deductions);
        
        return netpay;
    }
  
    public static void main(String[] args) 
    {
        Scanner userinput = new Scanner(System.in);
        
        int arrar[]=new int[8];
        
        double  fixedsalary=0,hrlyrate=0,
                NIS=0,healthsurcharge=0, 
                gp,  np, hrswrk, personal_allow=0,
                payrate=0, max=0, min=0;
                
        int i=0;
        char qcode = 'r';
        
        char emp_unique_cde[]= new char[2];
        String emp_fullname[] = new String[8];
        String emp_lastname[] = new String[8];
        double grosspay[] = new double[8];
        double deductions[]= new double[8];
        double netpay[]= new double[8];
        double salaries[] = new double[8];
        int process_emp[] = new int[8];
        int num_emp[] = new int[8];
        double totalPayroll[] = new double[8];
        
        
        System.out.println("How many employetes that are being processed");
        process_emp[i] = userinput.nextInt();
        
        System.out.println("Please enter the employee ID number");
        String emp_IDnum = userinput.next();
        
        System.out.println("Please enter the employee full name");
        emp_fullname[i] = userinput.next();
        
        System.out.println("Please enter the employee last name");
        emp_lastname[i] = userinput.next();
        
        System.out.println("Please enter the employee departmet working in");
        String department = userinput.next();
        
        System.out.println("Please enter the employee hours of work");
        hrswrk = userinput.nextDouble();
        
        System.out.println("Please enter the employee  unique ID  code");
        emp_unique_cde[i] = userinput.next().charAt(0);
        
        if(emp_unique_cde[i] == 'r' ||emp_unique_cde[i] =='R'|| emp_unique_cde[i] == 'l' || emp_unique_cde[i] == 'L')
        {
            System.out.println("please enter your employee qualification code");
            qcode = userinput.next().charAt(0);
            
            if(qcode == 1)
            {
                gp = calGrossLecturer(hrswrk, payrate);
            }
            else if(qcode == 2)
            {
                gp = calGrossRWorker(hrswrk, payrate);
            }
            
            System.out.println("Please enter the employee fixed salary");
            fixedsalary = userinput.nextDouble();
            
            if(hrswrk == 160)
            {
                gp = (fixedsalary);
            }
            else if(hrswrk < 160)
            {
                hrlyrate = (fixedsalary / 160);
                gp = (hrlyrate * hrswrk);
            }
            else
            {
                gp = (fixedsalary) + (hrswrk - 160) * 2 * hrlyrate;
            }
            if(gp < 5000)
            {
                deductions[i] = calDeductions(NIS, healthsurcharge);
            }
            else
            {
                gp = (grosspay[i] - 5000) * 0.25 + 33 + 19.20;
                netpay[i] = calNetpay(grosspay[i], deductions[i]);
            }
           
           while(totalPayroll[i] < salaries[i])
            {
                System.out.printf("Enter employee monthly salary %d: ", totalPayroll[i]);
            }
            
            while(totalPayroll[i] < num_emp[i])
            {
                
                if(totalPayroll[i] == num_emp[i])//if the totalpayroll is equal to the amount of employees on the payroll
                {
                    personal_allow = personal_allow * 0.15;
                    totalPayroll[i] = (hrswrk + fixedsalary + grosspay[i] + hrlyrate) + netpay[i] + personal_allow + 160 * 2 * payrate;
                }
               
            }
               max = salaries[0];
               int freq = 1;
               
                for(i = 0; i < salaries.length; i++)
                {
                    salaries[i] = userinput.nextDouble();
                    
                    if(salaries[i] > max)
                    {
                        freq = 1;
                        
                        max = salaries[i];
                    }
                    else if(salaries[i] == max)
                    {
                        max = salaries[i];
                    }
                }
                  max = salaries[0];
               
                  
                  freq = 1;
               
                for(i = 0; i < salaries.length; i++)
                {
                    salaries[i] = userinput.nextDouble();
                    
                    if(salaries[i] > min)
                    {
                        freq = 1;
                        
                        min = salaries[i];
                    }
                    else if(salaries[i] == min)
                    {
                        min = salaries[i];
                    }
                }
                
                System.out.println("The employees qualification code is: "+qcode);
                System.out.println("The employee unique code is: "+emp_unique_cde[i]);
                System.out.println("The employee number is: "+ emp_IDnum);
                System.out.println("The employee full and last name is: "+emp_fullname[i]+" "+emp_lastname[i]);
                System.out.println("The department the employee working in is: "+department);
                System.out.println("The employee hours of work is: "+hrswrk);
                System.out.println("The total deduction is: "+deductions[i]);
                System.out.println("The gross pay is: "+grosspay[i]);
                System.out.println("The netpay is: "+netpay[i]);
                 
                System.out.println("\n************Report********************\n");
                 
                System.out.println("The number of process employees are: "+process_emp[i]);
                System.out.println("The total grosspay for all employees are: "+totalPayroll[i]);
                System.out.println(emp_fullname[i]+" "+emp_lastname[i]+ " is the highest paid employee who received: "+ " the amount of $: "+max);
                System.out.println(emp_fullname[i]+" "+emp_lastname[i]+ " is the lowest paid employee who received: "+ " the amount of $: "+min);

Sergey Alexandrovich Kryukov

Извините, это не вопрос.
Вся помощь, которая вам нужна, - это одно волшебное слово: отладчик.
—СА

Richard MacCutchan

Не использовать float или Double для финансовых значений, используйте целое или десятичное число.

1 Ответов

Рейтинг:
2

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает работать так, как вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Используйте отладчик, чтобы сузить исследование ошибок. Если вы нашли конкретное место, которое пошло не так, и вы не понимаете, почему, вернитесь и объясните конкретную проблему.

вы можете удалить

int i=0;

из первых 4 процедур, так как он не используется.