本程序计算美国纳税人税收。
程序中的美国纳税人分为:单身纳税人、已婚共同纳税人或符合条件的活寡、已婚单独纳税人、家庭户主纳税人。
计算税收程序如下:
package pack2;
public class ComputeTax {
private final int SINGLE_FILER = 0; //单身纳税人
private final int MARRIED_JOINTLY_OR_QUALIFYING_WIDOW = 1; //已婚共同纳税人或符合条件的活寡
private final int MARRIED_SEPARATELY = 2; //已婚单独纳税人
private final int HEAD_OF_HOUSEHOLD = 3; //家庭户主纳税人
private double[][] taxation = {{835,3840,12075,25004,66462},{1670,7680,17287.5,20104,164100}, //存放临界税率金额的数组
{835,3840,8643.75,10052.28,27076.17},{1195,5032.5,17987.5,20370,60307.5}};
private double[][] tax = {{8350,33950,52250,171550,372950},{16700,67900,137050,208850,372950}, //存放临界金额的数组
{8350,33950,68525,104425,186475},{11950,45500,117450,190200,372950}};
private double[] taxRate = {0.10,0.15,0.25,0.28,0.33,0.35}; //存放临界税率的数组
private int state; //纳税人身份
private double amount; //纳税人收入
private double amountOfTax = 0; //纳税人应付税金
public ComputeTax() {
super();
}
public ComputeTax(int state, double amount) {
super();
this.state = state;
this.amount = amount;
compute(); //调用计算税金方法
}
/**
* 计算税金方法:
* 首先,设置一个变量j,然后执行0~tax[getState()].length长度次的循环。循环里的if语句用来判断
* 收入是否超过临界金额或等于临界金额。当为是时,变量amountOfTax加上对应的临界金额并把i值赋给j。
* 循环结束后的if(j==-1)语句判断收入是否小于第一个临界金额并再为是时进行 |收入*相应税率| 的计算。
* if(j==tax[getState()].length-1)语句判断金额是否大于最大临界金额并再为是时进行 |(收入-最大临界金额)*相应税率|。
* (此时,由于收入大于最大临界金额,循环内的所有临界税率金额都以加上)。
* if(getAmount()>tax[getState()][j] && getAmount()<tax[getState()][j+1])语句判断收入是否再两个
* 临界金额范围内,当为是时,执行|(收入-上一个临界金额)*相应税率|操作。
* */
//计算税金方法
public void compute() {
try {
int j = -1;
for (int i = 0; i < tax[getState()].length; i++) {
if(getAmount()> tax[getState()][i] || Math.abs(getAmount()-tax[getState()][i])<0.00001) {
amountOfTax += taxation[getState()][i];
j = i;
}
}
if(j==-1)
amountOfTax += getAmount()*taxRate[0];
if(j==tax[getState()].length-1)
amountOfTax += (getAmount()-tax[getState()][tax[getState()].length-1])*taxRate[taxRate.length-1];
if(getAmount()>tax[getState()][j] && getAmount()<tax[getState()][j+1])
amountOfTax += (getAmount()-tax[getState()][j])*taxRate[j+1];
}catch(ArrayIndexOutOfBoundsException ex) {
if(getState()==-1) //如身份错误,输出异常
System.out.println("Your status is invalid!");
}
}
//判断纳税人身份是否为四种身份的一种,如否,返回-1并被异常捕获处理
public int getState() {
if(state==SINGLE_FILER)
return 0;
if(state==MARRIED_JOINTLY_OR_QUALIFYING_WIDOW)
return 1;
if(state==MARRIED_SEPARATELY)
return 2;
if(state==HEAD_OF_HOUSEHOLD)
return 3;
return -1;
}
@Override
public String toString() {
return String.format("Tax is %.1f", getAmountOfTax());
}
public void setState(int state) {
this.state = state;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public double getAmountOfTax() {
return amountOfTax;
}
}
测试程序如下:
package pack2;
import java.util.Scanner;
public class TestComputeTax {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("(0-single filer, 1-married jointly or qualifying widow(er), "+
"2-married separately, 3-head of household)");
System.out.print("Enter the filling status: ");
int status = input.nextInt();
System.out.print("Enter the taxable income: ");
double income = input.nextDouble();
ComputeTax tax = new ComputeTax(status, income);
System.out.println(tax);
input.close();
}
}
运行结果如下: