【问题标题】:A java program that displays weekly payroll for 5 employees (error in desired output)显示 5 名员工每周工资单的 java 程序(所需输出错误)
【发布时间】:2019-03-03 16:47:49
【问题描述】:

我的编码是基于这个问题: screenshot of the question

这就是我编写的代码并且已经完成,但是我在所需的输出中有错误。

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("\n\n\t\tPrint Daily Company (PDC)\n\t\t   Weekly Payroll Data\n");
        System.out.println("----------------------------------------------------------------");
        System.out.println("   Name\t\tID#\tGross Pay\tTax\tNet 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:我也不知道如何解决空白操作系统跳过输入行的错误。所以我只是插入了 String nextLine = input.nextLine(); //在所有用户输入之前跳过空白错误。 (如果有人可以帮助我或教/教我流畅的输出,那就太好了)

提前谢谢你。

如果有人想知道,下面是我的输出的样子。 screenshot of output

[更新]: 这是我的程序的更新输出。 enter image description here我的净工资不工作,所以小数点值。仍然需要帮助。

提前谢谢你。

【问题讨论】:

    标签: java compiler-errors runtime-error


    【解决方案1】:

    所以这个小“问题”并不是那么容易抓住的。 但本质上,Java 通过四舍五入来欺骗你。每次您使用 (8 / 100) 或任何其他所得税计算时,java 都会将它们四舍五入为 0,因为整数/整数被解释为整数结果。修复它的最简单方法就是在每 100 个中添加 .0。

        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];
        }
    

    这应该可行。

    【讨论】:

    • 非常感谢。有效。但是我的净工资仍然没有工作。它只显示 0.0。
    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多