计算java中的阈值和费率所欠的税

时间:2011-02-24 02:20:53

标签: java algorithm methods

对于我作为学校作业的收入计划的一部分,我必须计算一个数字,即公民的总税收。我在文本文件中给出阈值的数量,阈值和每个阈值的速率。一个例子是

Threshold   Rate
$15,000 15%
$29,000 20%
$50,000 25%

净收入为55,000美元的公民将支付: $ 15,000 * 0%+ $ 14,000 * 15%+ $ 21,000 * 20%+ $ 5,000 * 25%= $ 7,550

我在这里开始了我的方法

private void computeTaxOwed(Citizen cit, TaxSchedule sked){

    double netIncome = cit.getNetIncome();
    double totTaxPaid = cit.getTotTaxPaid();

    int levels = sked.getNumLevels();
    double[] threshold = sked.getThreshold();
    double[] rate = sked.getRate();

    double taxOwd = 0;

    for(int i = levels; i>0; i--){
        taxOwd = ((netIncome-threshold[i])*rate[i]);
    }

我知道这不会给出正确的输出,我只是无法弄清楚如何使这个算法工作。如果我可以提取两个数组的值并将它们保存到单个变量中,我可以很容易地获得正确的输出,但我认为这非常混乱,而不是最好的方法。

任何想法都将不胜感激!

2 个答案:

答案 0 :(得分:3)

AlfaTek的建议答案并未涉及0-15000括号中的比率非零的情况,因为i> 0而不是i> = 0作为其for循环的终止条件。以下代码段处理此问题:

    double netIncomeLeft = netIncome;
    double taxOwd = 0;

    for (int i = threshold.length - 1; i >= 0; i--) {
        if(netIncomeLeft < threshold[i]) {
            //continue on if current tier is greater than the remainder
            continue; 
        }

        taxOwd += (netIncomeLeft - threshold[i]) * rate[i] / 100.0;
        netIncomeLeft = threshold[i];
    }

答案 1 :(得分:1)

class Main {

    public static void main(String[] args) {

        double netIncome = 55000;

        int levels = 3;
        double[] threshold = {0, 15000, 29000, 50000};
        double[] rate = {0, 15,20,25};

        double taxOwd = 0;

        double taxableIncome = 0;
        double netIncomeLeft = netIncome;

        for (int i = levels; i > 0; i--) {
            taxableIncome = netIncomeLeft - threshold[i];
            taxOwd += taxableIncome * (rate[i]/100);
            netIncomeLeft = threshold[i];
        }
        System.out.println("taxOwd " + taxOwd);
    }
}

或以更紧凑的方式:

        for (int i = levels; i > 0; i--) {
            taxOwd += ((netIncome - threshold[i]) * (rate[i]/100));
            netIncome = threshold[i];
        }