написание метода для расчета подоходного налога. Переменная не инициализируется

#java #if-statement #methods

#java #if-оператор #методы

Вопрос:

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

     public static double incomeTax(double gross, int dependents)
{
            double dTaxOnIncome;                // holds the calculated income tax.

            if(gross >= 10000 amp;amp; dependents == 0)
            {
                dTaxOnIncome = gross * .25; 
            }
            else
            {   
                if((gross >= 10000) amp;amp; ((dependents >= 1 amp;amp; dependents <= 4)))
                {
                    if(dependents == 1)
                    {
                        dTaxOnIncome = gross * .24;
                    }
                    else
                    {
                        if(dependents == 2)
                        {   
                            dTaxOnIncome = gross * .23; 
                        }
                        else
                        {
                            if(dependents == 3)
                            {
                                dTaxOnIncome = gross * .22; 
                            }
                            else
                            {
                                if(dependents == 4)
                                {
                                    dTaxOnIncome = gross * .21; 
                                }
                                else 
                                {   
                                    if(dependents == 5)
                                    {
                                        dTaxOnIncome = gross * .205; 
                                    }
                                    else
                                    {
                                        if(dependents == 6)
                                        {
                                            dTaxOnIncome = gross * .20; 
                                        }
                                        else 
                                        {
                                            if(dependents > 6)
                                            {
                                                dTaxOnIncome = gross * .18;
                                            }
                                            else
                                            {   
                                            }   

                                        }
                                    }
                                }
                            }   
                        }
                    }
                }
            }
    return dTaxOnIncome;    
}// end incomeTax (double, int) 
  

Я знаю, что мог бы использовать операторы if else, но я пробовал решить проблему несколькими способами, и этот показался мне наиболее простым.

Комментарии:

1. Отредактируйте строку на double dTaxOnIncome = 0.0 ;

2. Что, если ни одно из этих условий не будет выполнено? Какое значение должно быть возвращено? Что заставляет вас думать, что Java должна знать это значение?

3. Не цитируйте сообщения об ошибках неправильно. Это не то, что там написано. Посмотрите еще раз. Поймите, что это на самом деле говорит, и у вас есть свое решение.

Ответ №1:

Локальные переменные в Java должны быть неявно инициализированы, прежде чем их можно будет использовать. В вашем коде вы не инициализировали переменную dTaxOnIncome заранее, поэтому java пытается проверить, инициализируете ли вы ее позже, но оказывается, что ваша переменная не инициализируется в определенных местах, поэтому Java рассматривает эти ситуации. В таких случаях выполнения доступ к значению является проблемой.

Вы можете добавить некоторое значение по умолчанию в декларацию

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

Комментарии:

1. «везде, кроме последнего блока else» неверно, есть два сценария, в которых она не инициализируется. Другой случай, когда следующее значение равно false: if((gross >= 10000) amp;amp; ((dependents >= 1 amp;amp; dependents <= 4)))

2. О да, спасибо, что довели это до моего сведения. Я ответил с мобильного и не смог просмотреть код полностью.

3. Пожалуйста, но «единственная ситуация, когда ваш код переходит в последний блок else и переменная не будет инициализирована», все еще немного вводит в заблуждение

Ответ №2:

 public static double incomeTax(double gross, int dependents){
       double dTaxOnIncome=0.0;
       // if gross is less than 10000 there is no tax deduction
       if(gross<10000) return dTaxOnIncome;

       //gross is larger or equal to 10000
       //calculate tax deduction according to number of depedents

       if(dependents==0){
           dTaxOnIncome = gross * .25; 
       }
       if(dependents==1){
           dTaxOnIncome = gross * .24; 
       }
       if(dependents==2){
           dTaxOnIncome = gross * .23;  
       }
       if(dependents==3){
           dTaxOnIncome = gross * .22; 
       }
       if(dependents==4){
           dTaxOnIncome = gross * .21; 
       }
       if(dependents==5){
           dTaxOnIncome = gross * .205; 
       }
       if(dependents==6){
           dTaxOnIncome = gross * .20; 
       }           
       if(dependents>6){
          dTaxOnIncome = gross * .18; 
       }

       return dTaxOnIncome;

}