0

だから私は自分が間違ったことに本当に混乱しており、愚かな間違いを犯したことは知っていますが、本当に助けが必要です. 誰かが私にヒントを与えることができれば、それは大歓迎です。一人の収入を計算するコードを書いているのですが、なぜか出てくるのはクレジットだけです。

public class TaxReturn 
{
    private double income;
    private double deductions;
    private int numberofExemptions;
    private double credits;
    private double tax;

    public TaxReturn(double salary, double deductable, int exempt,
            double creditable)
    {   
        tax = 0;
        income = salary;
        deductions = deductable;
        numberofExemptions = exempt;
        credits = creditable;
    }

    public void calculateTax()
    {
        final double exempt = 3800;
        double exemption = numberofExemptions * exempt;
        double taxableIncome = income - deductions - exemption;

        final double rate_10 = 0.1;
        final double rate_15 = 0.15;
        final double rate_25 = 0.25;
        final double rate_28 = 0.28;
        final double rate_33 = 0.33;
        final double rate_35 = 0.35;
        final double rate_395 = 0.395;

        final double income1 = 8925;
        final double income2 = 36250;
        final double income3 = 87850;
        final double income4 = 183250;
        final double income5 = 398350;
        final double income6 = 400000;

        while(taxableIncome != 0)
        {
            if(taxableIncome > income6)
            {
                tax = (taxableIncome - income6) * rate_395;
            }
            else if(taxableIncome > income5)
            {
                tax = (taxableIncome - income5) * rate_35;
            }
            else if(taxableIncome > income4)
            {
                tax = (taxableIncome - income4) * rate_33;
            }
            else if(taxableIncome > income3)
            {
                tax = (taxableIncome - income3) * rate_28;
            }
            else if(taxableIncome > income2)
            {
                tax = (taxableIncome - income2) * rate_25;
            }
            else if(taxableIncome > income1)
            {
                tax = (taxableIncome - income1) * rate_15;
            }
            else
            {
                tax = (taxableIncome) * rate_10;
            }
        }
    }

    public int printTaxReturn()
    {
        int amount = (int) ((int)Math.ceil(tax) - credits);
        return amount;
    }
}

これは私がコードをテストするために使用するものです

    public class TaxReturnTester 
{

    public static void main(String[] args) 
    {

        TaxReturn tax = new TaxReturn(80500.5, 20000.00, 3, 5000.00);


        System.out.println(tax.printTaxReturn());
    }
}
4

3 に答える 3

0

whileループの代わりに、複数のif.

if(taxableIncome > income6)
{
    tax = (taxableIncome - income6) * rate_395; taxableIncome -= income6;
}
if(taxableIncome > income5)
{
    tax = (taxableIncome - income5) * rate_35; taxableIncome -= income5;
}
if(taxableIncome > income4)
{
    tax = (taxableIncome - income4) * rate_33; taxableIncome -= income4;
}
if(taxableIncome > income3)
{
    tax = (taxableIncome - income3) * rate_28; taxableIncome -= income3;
}
if(taxableIncome > income2)
{
    tax = (taxableIncome - income2) * rate_25; taxableIncome -= income2
}
if(taxableIncome > income1)
{
    tax = (taxableIncome - income1) * rate_15; taxableIncome -= income1;
}
tax = (taxableIncome) * rate_10;
于 2013-06-14T04:08:47.447 に答える
-2

calculateTax() を呼び出す必要があります。

次の 2 つのオプションがあります。

TaxReturnTester を次のように置き換えます。

public class TaxReturnTester
{
    public static void main(String[] args)
    {
        TaxReturn tax = new TaxReturn(80500.5, 20000.00, 3, 5000.00);
        tax.calculateTax();
        System.out.println(tax.printTaxReturn());
    }
}

また

コンストラクターを次のように置き換えます。

public TaxReturn(double salary, double deductable, int exempt,
            double creditable)
    {   
        tax = 0;
        income = salary;
        deductions = deductable;
        numberofExemptions = exempt;
        credits = creditable;
        calculateTax();
    }

金額を計算するには、浮動小数点数の代わりに BigDecimal を使用する必要があるという事実を支持します。そうしないと、矛盾が生じます。

オプション 1 を使用することが Thihara によって推奨されています。 オブジェクトを作成するたびに calculateTax() を実行したくない場合は、間違いなくオプション 1 を使用することをお勧めします。

于 2013-06-14T03:44:06.110 に答える