我的编码基于此问题:问题的屏幕截图
这是我编码的,它已经完成,但是我在所需的输出中有错误。
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。净薪水的输出与总工资相同的金额。我在程序中键入的给定样本的输出之一与其余的输出不同。
不同。P.S:我也不知道如何修复空格操作系统的错误跳过输入线。因此,我只是插入字符串nextline = input.nextline();//在所有用户输入之前跳过空格错误。(如果有人可以帮助我或教/向我展示一个顺利的输出,那就太好了)
预先感谢您。
下面是我的输出的样子,以防万一有人想知道。输出的屏幕截图
[更新]:这是我程序的更新输出。在此处输入图像描述,我的净支付不起作用,因此作为小数点值。仍然需要帮助。
预先感谢您。
,所以这个小的"问题"并不容易抓住。但从本质上讲,Java通过舍入数字欺骗了您。每当您使用(8/100)或任何其他计算所得税计算时,Java都会将它们舍入0,因为整数/整数都被解释为整数结果。修复它的最简单方法就是将.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];
}
这应该有效。