对于我作为学校作业的收入计划的一部分,我必须计算一个数字,即公民的总税收。我在文本文件中给出阈值的数量,阈值和每个阈值的速率。一个例子是
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]);
}
我知道这不会给出正确的输出,我只是无法弄清楚如何使这个算法工作。如果我可以提取两个数组的值并将它们保存到单个变量中,我可以很容易地获得正确的输出,但我认为这非常混乱,而不是最好的方法。
任何想法都将不胜感激!
答案 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];
}