Как заставить эту программу работать правильно
привет всем: я практиковался с этой программой расчета заработной платы уже очень давно, и за всю свою жизнь я просто не могу заставить ее дать мне правильный результат.
Я не получаю валовую зарплату, нетпей, вычет, чтобы дать правильный результат, он выводит ноль.
а еще нужно выводить сотрудников, которые получали самые высокие и самые низкие зарплаты. Этого я тоже не понимаю.
однажды я получил ошибку 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 для финансовых значений, используйте целое или десятичное число.