Java、计算税收(Java8)

本程序计算美国纳税人税收。

程序中的美国纳税人分为:单身纳税人、已婚共同纳税人或符合条件的活寡、已婚单独纳税人、家庭户主纳税人。


计算税收程序如下: 

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();
	}

}

运行结果如下:

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值