计算应税收入Java

时间:2013-02-06 21:25:09

标签: java

我刚刚在大学完成了Java测试,我知道我已经回答了一个错误的特定问题并希望得到一些帮助/澄清吗?

问题如下:

实施一种方法,可以收取某些收入并计算税收。 如果那个人的收入低于7500,那么税收= 0。 如果那个人的收入在7501到45000之间,那么税收= 20%,少于7500,这是免税的。 最后,如果那个人的收入高于45001,那么税收= 40%,减去20%的收入,然后减去7500的免税额。

由于时间紧迫,我只是做了一个显示收入和税收括号的基本if else声明,如下所示。

public static double incomeTax(double income){

    if(income <= 7500){
           income = income * 0;
       }
     else if(income >= 7501 && income <= 45000){
           income = income * 0.8;
       }
     else(income >= 45001){
           income = income * 0.6;
       }
     return income;
} 

我知道代码不正确,没有附近的地方,但是当它到达测试结束时,我希望只是为if else语句得到一个标记。

我真的很感激这里的任何帮助。

谢谢。

经过很好的反馈,这是我带回来的(有很多帮助!!:])...

import java.util.Scanner;

public class TaxableIncome
{
public static void main(String[] args){
    netIncome();
}

public static double netIncome() {
    double income = 0;

    Scanner in = new Scanner(System.in);

    System.out.print("Enter income: ");
    income = in.nextDouble();
    System.out.println();

    double tax1 = 0;
    double tax2 = 0;
    double totalTax = tax1 + tax2;

    // high income bracket
    if (income > 45000) {
        double part1 = income - 45000; // part = income - 45000
        tax1 += part1 * 0.4; // tax = tax + part * 0.4
        System.out.println("High Tax Band - Greater than 45000: " + tax1);
    }

    // medium income bracket
    if (income >  7500) {
        double part2 = income - 7500;
        tax2 += part2 * 0.2;
        System.out.println("Medium Tax Band - Greater than 7500: " + tax2);
    }

    System.out.println("Total Tax = " + (tax1 + tax2));

    // tax for low income is zero, we don't need to compute anything.

    return totalTax;
   }
}

5 个答案:

答案 0 :(得分:1)

一个简单的答案就是:

public static double netIncome(double income) {

  double tax = 0;

  // high income bracket
  if (income > 45000) {
    double part = income - 45000;
    tax += part * 0.4;
    income = 45000;
  }

  // medium income bracket
  if (income >  7500) {
    double part = income - 7500;
    tax += part * 0.2;
  }

  // tax for low income is zero, we don't need to compute anything.

  return tax;
}

通过这种方式,您可以计算每个税级的税额并将其相加。

答案 1 :(得分:0)

你必须在乐队中征税。脏的(未经测试的)代码:

public static double incomeTax(double income){
    double tax = 0;
    if(income > 7500){
        tax += Math.min(45000-7500, income-7500)*.2;
    }

    if(income > 45000){
        tax += (income-45000)*.4;
    }
    return tax;
}

答案 2 :(得分:0)

您需要尝试多次应用税率。您的代码只能达到一个税级。如果我赚了100k,那么整个100k我的税率为40%。这是我很快想出来的。

public static double incomeTax(double income)
{
    double tax = 0.0;
    int midLevel = 7500;
    int highLevel = 45000;

    if (income <= 7500)
    {
        // Could early exit at this point and return already set tax
        tax = 0.0;
    }

    if (income > midLevel)
    {
        // Find range of income > 7500, less than 4500. 37499 max
        double taxableIncome = Math.min(income - midLevel, highLevel - midLevel - 1);
        tax += taxableIncome * 0.2;
    }

    if (income > highLevel)
    {
        // Income above 45k
        double taxableIncome = income - highLevel;
        tax += taxableIncome * 0.4;
    }

    return tax;
} 

答案 3 :(得分:0)

我会从这样的事情开始:

public static double incomeTax(int income) {
    final double band00Income = (double) Math.min(income, 7500);
    final double band20Income = (double) Math.min(income - band00Income, 45000 - 7500);
    final double band40Income = (double) Math.max(income - 45000, 0);

    final double tax = band20Income * 0.2 + band40Income * 0.4;

    return tax;
}

请注意,由于英国税收计算的特殊性,收入是一个整数 - 它也解决了7500.01和7500.99之间未指明案例的问题。

更好的解决方案是为所有幻数提取常量。更好的解决方案是将频段和速率推广到表中,以便可以轻松更改。

完整的答案可能包括以下测试用例:

import org.junit.Assert;
import org.junit.Test;

public class TestTax
{
    public static final double DELTA = 0.1;

    @Test
    public void testTax() {
        Assert.assertEquals(0.0, incomeTax(-3000), DELTA);
        Assert.assertEquals(0.0, incomeTax(0), DELTA);
        Assert.assertEquals(0.2, incomeTax(7501), DELTA);
        Assert.assertEquals(3000.0, incomeTax(22500), DELTA);
        Assert.assertEquals(7500.0, incomeTax(45000), DELTA);
        Assert.assertEquals(7500.4, incomeTax(45001), DELTA);
        Assert.assertEquals(25500.0, incomeTax(90000), DELTA);
    }

    public static double incomeTax(int income) {
        final double band00Income = (double) Math.min(income, 7500);
        final double band20Income = (double) Math.min(income - band00Income, 45000 - 7500);
        final double band40Income = (double) Math.max(income - 45000, 0);

        final double tax = band20Income * 0.2 + band40Income * 0.4;

        return tax;
    }
}

答案 4 :(得分:0)

您可以尝试这样做,只需将您的收入括号复制到括号数组中。确保括号数组中有无穷大,并在 rate 数组中以 0 开头。

import java.util.Scanner;
import java.text.DecimalFormat;
class IncomeTaxWithBrackets {
public static void main(String[] args) {

    double infinity = Double.POSITIVE_INFINITY;
    double [] bracket = {0, 7565, 25903, 54987, 121121, 567894, infinity}; 
    double [] rate = {0, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35};
    // bracket[0] to bracket[1] are assigned rate[1]

    double income = 0;
    double tax = 0;

    System.out.print("\nPlease enter your income: ");

    Scanner keyboard = new Scanner (System.in);
    DecimalFormat dollar = new DecimalFormat ("$#,##0.00");

    income = keyboard.nextDouble();

    int x,i;

    for (i=0; i <= 5; i++) {
        if (income > bracket[i] && income <= bracket[i+1]) {
            for (x=0; x<i; ++x) {
                tax = tax + (bracket[x+1] - bracket[x]) * rate[x+1];
            }   
            tax = tax + (income - bracket[i]) * rate[i+1];
        }
    }       
    System.out.println("\nWith a taxable income of "+dollar.format(income)+", your personal income tax is "+dollar.format(tax));
}
  }

让我知道你的想法。