Java-программа, которая отображает еженедельную зарплату для 5 сотрудников (ошибка в желаемом результате)

#java #compiler-errors #runtime-error

#java #ошибки компилятора #время выполнения-ошибка

Вопрос:

Мое кодирование основано на этом вопросе: скриншот вопроса

И это то, что я закодировал, и это завершено, но у меня ошибка в желаемом результате.

 package assignment_2;

import java.util.Scanner;
public class Assignment_2 {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner input = new Scanner (System.in);
        
        String employeeName[] = new String[5];
        int employeeID[] = new int[5];
        int payStatus[] = new int[5];
        double Grosspay[] = new double [5];
        int workHours[] = new int[5];
        double payRateperhour[] = new double [5];
        double incomeTax[] = new double [5];
        double netPay[] = new double [5];
        
        
        
        System.out.println("Enter 5 employee details.");
        
        for (int i = 0; i < 5; i  ) {
            String nextLine = input.nextLine(); //skip whitespace error
            System.out.print("Enter Employee "   (i 1)   " name: "); //prompt user input for employee name
            employeeName[i] = input.nextLine();
            System.out.print("Enter Employee "   (i 1)   " ID: "); //prompt user input for employee ID
            employeeID[i] = input.nextInt();
            System.out.print("Enter Employee "   (i 1)   " pay status (1 = Salary or 2 = Hourly): "); //prompt user input for employee paid by salary or hourly?
            payStatus[i] = input.nextInt();
            if (payStatus[i] == 1){ //pay by salary user input
                System.out.print("Enter employee gross pay(RM): ");
                Grosspay[i] = input.nextDouble();
                System.out.print("Enter employee work hours per week: ");
                workHours[i] = input.nextInt();
            } else { //pay by hourly user input
                System.out.print("Enter employee pay rate per hour(RM): ");
                payRateperhour[i] = input.nextDouble();
                System.out.print("Enter employee work hours per week: ");
                workHours[i] = input.nextInt();
                //calculate overtime pay
                if (workHours[i] > 40) {
                    Grosspay[i] = (40 * payRateperhour[i])   1.5 * (workHours[i] - 40) * payRateperhour[i];
                } else Grosspay[i] = workHours[i] * payRateperhour[i];

            }
        
        //calculate income tax
        if (Grosspay[i] > 0.00 || Grosspay[i] < 999.99) {
            incomeTax[i] = (8 /100) * Grosspay[i];
        } else if (Grosspay[i] > 500.00 || Grosspay[i] < 999.99) {
            incomeTax[i] = (10 /100) * Grosspay[i];
        } else if (Grosspay[i] > 1000.00) {
            incomeTax[i] = (15 /100) * Grosspay[i];
        } else
            
        //calculate net pay 
        netPay[i] = Grosspay[i] - incomeTax[i];
        
    }
//Display employee details and weekly salary
        System.out.print("nnttPrint Daily Company (PDC)ntt   Weekly Payroll Datan");
        System.out.println("----------------------------------------------------------------");
        System.out.println("   NamettID#tGross PaytTaxtNet Pay");
        for (int i = 0; i < 5; i  ) {
            System.out.println(employeeName[i]   "t"   employeeID[i]   "t"   Grosspay[i]   "t"   incomeTax[i]   "t"   netPay[i]);
                    }
        
    }
    
}  

Моя ошибка в том, что она не рассчитывает подоходный налог. На выходе отображается 0.00. И чистая оплата выводится в той же сумме, что и валовая оплата. И один из выходных данных из данного примера, который я ввел в свою программу, показал более 2 знаков после запятой, в отличие от остальных выходных данных.

P.s: Я также не знал, как исправить ошибку, связанную с пропуском строки ввода в ос с пробелами. Итак, я просто вставил строку nextLine = input.nextLine(); //ошибка пропуска пробелов перед всеми пользовательскими вводимыми данными. (Если кто-нибудь может мне помочь с этим или научить / показать мне плавный вывод, это было бы здорово)

Заранее благодарю вас.

Ниже показано, как выглядит мой вывод на случай, если кому-то интересно. скриншот выходных данных

[ОБНОВЛЕНИЕ]: Это обновленный вывод для моей программы. введите описание изображения здесь Моя чистая зарплата не работает, и поэтому в качестве значения с десятичной запятой. Все еще нуждается в помощи.

Заранее благодарю вас.

Ответ №1:

Так что эту маленькую «проблему» не так-то просто выявить. Но, по сути, Java обманула вас, округлив числа. Каждый раз, когда вы использовали (8/100) или любое другое из вычислений для налога на прибыль, java просто округляла их до 0, потому что integer / целое число интерпретируется как целочисленный результат. Самый простой способ исправить это — просто добавить .0 к каждому 100.

     if (Grosspay[i] > 0.00 || Grosspay[i] < 999.99) {
        incomeTax[i] = (8 / 100.0) * Grosspay[i];
    } else if (Grosspay[i] > 500.00 || Grosspay[i] < 999.99) {
        incomeTax[i] = (10 / 100.0) * Grosspay[i];
    } else if (Grosspay[i] > 1000.00) {
        incomeTax[i] = (15 / 100.0) * Grosspay[i];
    }
  

Это должно сработать.

Комментарии:

1. Большое вам спасибо. Это сработало. Но моя чистая зарплата по-прежнему не работает. Она просто показывает 0.0.