2

大学でJavaテストを終えたばかりですが、特定の質問に間違って答えたことを知っています。助け/説明をお願いします。

質問は次のとおりです。

誰かの収入を受け取り、税金を計算する方法を実装します。その人の収入が7500未満の場合、税金=0です。その人の収入が7501から45000の場合、税金= 20%から7500を差し引いたもので、免税となります。最後に、その人の収入が45001を超える場合、税金= 40%、20%の範囲内の収入を差し引いた後、免税である7500を差し引きます。

時間が足りなくなったので、以下の例のように、収入と税金の括弧を示す基本的なifelseステートメントを実行しました。

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

コードが正しくないことはわかっていますが、テストが終わりに近づいたので、ifelseステートメントのマークを取得することを期待してコードを試してみました。

ここで助けていただければ幸いです。

ありがとうございました。

素晴らしいフィードバックの後、これは私が戻ってきたものです(たくさんの助けを借りて!!:])...

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

6 に答える 6

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

このようにして、各税ブラケットの税を計算し、それらを合計します。

于 2013-02-06T21:31:50.383 に答える
0

ロジックに問題はありません。あなたが抱えていた主な問題は、総所得ではなく、所得税を返還する必要があるということでした。したがって、返す必要のある値は、income*whateverPercentTaxでした。

また、私は試したでしょう:

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

しかし、それは私だけです。

于 2013-02-06T21:29:47.247 に答える
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;
}
于 2013-02-06T21:30:25.647 に答える
0

税率の適用を複数回試みる必要があります。あなたのコードは1つの税額にしか当てはまりません。もし私が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;
} 
于 2013-02-06T21:35:42.170 に答える
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;
    }
}
于 2013-02-06T21:44:37.807 に答える
0

これを試すことができます。ブラケット配列に収入ブラケットをコピーするだけです。ブラケット配列に無限大があり、レート配列が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));
}
  }

どう考えているか教えてください。

于 2013-11-05T04:30:53.450 に答える