Java税收类

时间:2013-06-07 21:02:27

标签: java

所以这段代码似乎对我要求做的事情很好但是我觉得它是一团糟,想要找出方法来清理它有点没什么东西可能只是for循环或if语句甚至可能甚至for loop增强甚至是一个数组。我觉得这段代码太长而且有点像spheggti代码

这是我所在的计算机科学课程。 这是说明。

  
    

编写一个程序,为申请状态为单身的人计算应付税款。包括扣除,免税和信用。应用     扣除后的税率和收入     豁免。然后从税收中扣除积分,以获得最终结果     应缴税额。预期的输出样本如下。命名你的     class TaxReturn。收入:85,500美元扣除额:23,753美元     豁免:15,200美元

  
     

应税收入:46,547美元

     

税:7,667美元减去5,000美元

     

到期税:2,667美元

     

•豁免=豁免数量X $ 3,800•应税收入=收入    - 扣除 - 免税•税额(见下图)•到期税=

3 个答案:

答案 0 :(得分:1)

在效率方面,代码很好。

就清晰度而言,我正在这样做

if (/*something*/) {
    // do this here
}

而不是

if (/*something*/)
{
    // do this here
}

您可以删除评论或缩短评论

final double TAXRATE_15PERCENT = 0.15;    // 15% tax
final double TAXRATE_28PERCENT = 0.28;    // 28% tax

而不是

// This is the tax rate percent on the tax 15%
final double TAXRATE_15PERCENT = 0.15;

这种缩短可能会让你的代码更好看。我不知道这些是你正在寻找的。

答案 1 :(得分:1)

你可以开始使用一个“taxBoundaries”类来保存关于税收等级的信息(丰富,而不是富裕等),并编写一种方法,给定收入作为输入,检索正确的税收和税收边界

答案 2 :(得分:1)

如果您正在进行面向对象的编程,并且一直引用名词,那么您没有,那么您没有进行面向对象的编程右。

public interface Tax {

  public double taxOn(double value);

}

/**
 *  This class returns tax by table lookup, much like the first 100K in an USA IRS 1040.
 */
public class TableTax {


}

/**
 * This class returns tax by formula, much like the tax for those making +$100K in a 
 * USA IRS 1040.
 */
public class CalculatedTax {

}

我计算的程序中至少有六个税率,如果您需要更新它,则必须重写所有逻辑。良好的面向对象编程设计以替换显然将被替换的那些,通常是通过接口调用可替换组件。

然后你可以制作“TaxFactory”,它接受一个输入并返回“Tax”。

public TaxFactory {

  public Tax getTaxFor(double value) {
    tax = // however you decide which tax to use.
    return tax;
  }

}

现在你的代码看起来真的很干净

double taxAmount = new TaxFactory().getTaxFor(earnings).taxOn(earnings);

---编辑以响应需要使用数组和for循环---

好的,所以我们假设它在前20,000个中征税10%,在接下来的20,000个中征收15%,在接下来的40,000个中征收17%,在所有上面的所有东西上征收20%。

double balance = taxable_amount;
double tax_bracket[][] = {{0.10, 20000}, {0.15, 20000}, {0.17, 40000}, {0.20, Double.MAX_VALUE}};

double tax = 0;
for (int index = 0; index < tax_bracket.length; index++) {
  if (balance > 0) {
    if (tax_bracket[index][1] < balance) {
      // calculate fraction of tax for the entire bracket
      tax += tax_bracket[index][0] * tax_bracket[index][1];
      // deduct the taxed part of the balance
      balance -= tax_bracket[index][1];
    } else {
      // calculate fraction of tax for the remaining balance
      tax += tax_bracket[index][0] * balance;
      // the entire balance has been taxed
      balance = 0;
    }
  }
}
return tax;