Расчет налога с порогов и ставок в Java - PullRequest
1 голос
/ 24 февраля 2011

для части моей программы доходов, которую я делаю в качестве задания для школы, мне нужно рассчитать число, которое является суммой общего налога, причитающегося с гражданина. Мне дается в текстовом файле количество порогов, пороговое значение и скорость на каждом пороге. Примером является

Threshold   Rate
$15,000 15%
$29,000 20%
$50,000 25%

Гражданин, чей чистый доход составляет 55 000 долларов, будет платить: $ 15 000 * 0% + $ 14 000 * 15% + $ 21 000 * 20% + $ 5000 * 25% = 7550

Я начал свой метод здесь

private void computeTaxOwed(Citizen cit, TaxSchedule sked){

    double netIncome = cit.getNetIncome();
    double totTaxPaid = cit.getTotTaxPaid();

    int levels = sked.getNumLevels();
    double[] threshold = sked.getThreshold();
    double[] rate = sked.getRate();

    double taxOwd = 0;

    for(int i = levels; i>0; i--){
        taxOwd = ((netIncome-threshold[i])*rate[i]);
    }

Я знаю, что это не даст правильного вывода, и я просто не могу понять, как заставить этот алгоритм работать. Если бы я мог извлечь значения обоих массивов и сохранить их каждое в отдельной переменной, я мог бы легко получить правильный вывод, но я думаю, что это очень грязно и не лучший способ сделать это.

Любые идеи будут с благодарностью!

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

Предлагаемый ответ AlfaTek не касается случая, когда скорость в скобках 0-15000 отлична от нуля, потому что i> 0, а не i> = 0 в качестве условия завершения его цикла for.Следующий фрагмент посвящен этой проблеме:

    double netIncomeLeft = netIncome;
    double taxOwd = 0;

    for (int i = threshold.length - 1; i >= 0; i--) {
        if(netIncomeLeft < threshold[i]) {
            //continue on if current tier is greater than the remainder
            continue; 
        }

        taxOwd += (netIncomeLeft - threshold[i]) * rate[i] / 100.0;
        netIncomeLeft = threshold[i];
    }
1 голос
/ 24 февраля 2011
class Main {

    public static void main(String[] args) {

        double netIncome = 55000;

        int levels = 3;
        double[] threshold = {0, 15000, 29000, 50000};
        double[] rate = {0, 15,20,25};

        double taxOwd = 0;

        double taxableIncome = 0;
        double netIncomeLeft = netIncome;

        for (int i = levels; i > 0; i--) {
            taxableIncome = netIncomeLeft - threshold[i];
            taxOwd += taxableIncome * (rate[i]/100);
            netIncomeLeft = threshold[i];
        }
        System.out.println("taxOwd " + taxOwd);
    }
}

или более компактно:

        for (int i = levels; i > 0; i--) {
            taxOwd += ((netIncome - threshold[i]) * (rate[i]/100));
            netIncome = threshold[i];
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...