2013-02-06 48 views
2

我剛剛在大學完成了一項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; 
} 

我知道這些代碼是不正確的,沒有在附近,但因爲它是來測試結束時,我的希望給了它一個去只是爲了獲得針對如果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; 
    } 
} 
+0

它說:「如果那個人在7501和45000之間賺錢,那麼稅收= 20%',但是你把'收入'乘以8,爲什麼?我認爲這比數據編程更適合你的情況。 –

+0

是的,我很受打擊... 雖然感謝。其實,是的,總是搞砸了。 – PrimalScientist

+0

請勿使用'double'或'float'作爲貨幣價值。錢是固定的十進制數,不是浮點數。而是用最小的面額來表示你的貨幣價值(美國的前幾分錢)。 – DwB

回答

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; 
} 

這樣你計算每個稅率納稅,總結他們。

+0

感謝您在此處的反饋。這真的很有用。慚愧我的數學...:[ – PrimalScientist

0

我認爲沒有錯的邏輯。你的主要問題是你只需要退還所得稅,而不是總收入。所以你需要返回的價值是收入*任何百分比稅。

另外,我已經試過:

if(income < 7001){ 
}else if(income >=45001){ 
}else{} 

但是,這僅僅是我的。

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; 
} 
+0

我跑過這個通過我的單元測試,發現這些問題:Math.max應該是Math.min在第4行。收入 - 45000應該是(收入 - 45000)第8行。 – richj

+0

@richj所有帳戶的權利:)就像我說在網站上直接快速入侵。感謝您檢查它!我已經更新了答案 – Miquel

0

您需要嘗試多次應用稅率。您的代碼只碰到一個稅號。如果我賺了10萬,那麼整個10萬美元我都會被徵稅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; 
} 
+0

謝謝你在這裏的幫助。最有用的。 我現在將使用它並建立它。 關於數學,我實際上使用了類似於我們在課堂上進行的工作,因爲可以打九折。 因此,10%的折扣將使用折扣=折扣* 0.9。 我原來的帖子顯然有這個錯誤。 但是,再次感謝你。很好的反饋。 – PrimalScientist

+0

我通過我的單元測試運行了這個過程,發現了這些問題:稅收需要初始化才能編譯 - 至少在JDK 1.7中。在線10 7501應該是7500.對45000以上的收入徵收20%和40%的稅率,共計60%。 – richj

+0

@richj - 我改變了它,結果就像Miquel發佈的解決方案一樣。 – merekel

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; 
} 

注意,收入是由於在英國的稅收計算的特殊性一個int - 這也與之間的未指定的情況下解決問題包括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; 
    } 
} 
+0

謝謝你。我甚至不知道從哪裏開始! 但這是渴望!謝謝。 =] – PrimalScientist

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)); 
} 
    } 

讓我知道您的想法。