0

所以这段代码似乎可以很好地完成我被要求做的事情,但我觉得它是一团糟,想找出一些方法来清理它,一点也不先进,可能只是一个 for 循环或 if 语句,甚至可能是 for 循环增强甚至是一个数组。我觉得这段代码太长而且很乱,有点像 spheggti 代码

这是我上的计算机科学课。这里是说明。

编写一个程序,计算一个申请状态为单身的人的应缴税款。包括扣除、豁免和抵免。在应用减免后,将税率应用于收入。然后从应缴税款中减去抵免额,以获得最终应缴税额。下面提供了预期的输出样本。将您的班级命名为 TaxReturn。收入:85,500 美元 扣除额:23,753 美元 免税额:15,200 美元

应税收入:46,547 美元

税:$ 7,667 减抵扣 $ 5,000

应缴税款:2,667 美元

• 豁免 = 豁免数量 X 3,800 美元 • 应税收入 = 收入 – 扣除 – 豁免 • 税额(见下表) • 应缴税额 =

4

3 回答 3

1

您可以开始使用“taxBoundaries”类来保存有关税类(富人、不富人等)的信息,并编写一个方法,将收入作为输入,检索正确的税率和税收边界

于 2013-06-07T21:23:24.117 回答
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;

这种缩短可能会让你的代码看起来更好看。我不知道这些是不是你要找的。

于 2013-06-07T21:20:24.043 回答
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;
于 2013-06-07T21:29:16.033 回答