所以这段代码似乎对我要求做的事情很好但是我觉得它是一团糟,想要找出方法来清理它有点没什么东西可能只是for循环或if语句甚至可能甚至for loop增强甚至是一个数组。我觉得这段代码太长而且有点像spheggti代码
这是我所在的计算机科学课程。 这是说明。
编写一个程序,为申请状态为单身的人计算应付税款。包括扣除,免税和信用。应用 扣除后的税率和收入 豁免。然后从税收中扣除积分,以获得最终结果 应缴税额。预期的输出样本如下。命名你的 class TaxReturn。收入:85,500美元扣除额:23,753美元 豁免:15,200美元
应税收入:46,547美元
税:7,667美元减去5,000美元
到期税:2,667美元
•豁免=豁免数量X $ 3,800•应税收入=收入 - 扣除 - 免税•税额(见下图)•到期税=
答案 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;
这种缩短可能会让你的代码更好看。我不知道这些是你正在寻找的。 p>
答案 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;