2013-05-23 5 views
-2

Как указано выше, проблема - я столкнулся с проблемой, связанной с частной переменной внутри класса. Закрытая переменная не возвращает правильное значение.Закрытая переменная не возвращается должным образом

Моя цель - получить приватную переменную с именем myIncome от income Класс, являющийся родителем этих методов. Но когда я пытаюсь извлечь myIncome, используя objIncome.getIncome(); в другом классе, он возвращает значение 0.00.

Результат должен быть основан на выводах операторов if.

import java.util.Scanner; 
import java.text.DecimalFormat; 

public class income { 

    private double income; 
    private double myIncome; 

    Scanner input = new Scanner(System.in); 
    DecimalFormat df = new DecimalFormat("###.##"); 

    public void summery1(double myIncome, double income, double tax, double nic, double personalTAXAllowance, double personalNICAllowance,double taxed, double niced){ 
     this.myIncome = myIncome; 
     System.out.println("Your income before tax: " + income); 
     System.out.println("Personal allowance: " + personalTAXAllowance); 
     System.out.println("NIC allowance: " + personalNICAllowance); 
     System.out.println("Tax rate: " + tax + " %"); 
     System.out.println("National insurance rate: " + nic + " %"); 
     System.out.println("Your annual income after tax: " + df.format(myIncome)); 
     System.out.println("Your income on monthly basis: " + df.format(myIncome/12) + "\n"); 
    } 
    public void summery2(double myIncome, double income, double tax, double nic, double personalTAXAllowance, double personalNICAllowance,double taxed, double niced, double additionalNIC, double resault){ 
     this.myIncome = myIncome; 
     System.out.println("Your income before tax: " + income); 
     System.out.println("Personal allowance: " + personalTAXAllowance); 
     System.out.println("NIC allowance: " + personalNICAllowance); 
     System.out.println("Tax rate: " + tax + " %"); 
     System.out.println("National insurance rate: " + nic + " %"); 
     System.out.println("Your annual income after tax: " + df.format(myIncome)); 
     System.out.println("Your income on monthly basis: " + df.format(myIncome/12) + "\n"); 
    } 


    public void clcSalary(){ 

     System.out.println("Please enter your annual salary before tax"); 
     double income = input.nextDouble(); 

     if (income <= 32010){ 

      double tax = 0.20; 
      double nic = 0.12; 
      double personalTAXAllowance = 9440; 
      double personalNICAllowance = 7748; 

      double taxed = (income - personalTAXAllowance) * tax; 
      double niced = (income - personalNICAllowance) * nic; 

      myIncome = income - (taxed + niced); 

      summery1(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced); 

     } 
     else if (income > 32010 && income < 150000){ 
      double tax = 0.40; 
      double nic = 0.12; 
      double personalTAXAllowance = 9440; 
      double personalNICAllowance = 7748; 

      double taxed = (income - personalTAXAllowance) * tax; 
      double niced = (income - personalNICAllowance) * nic; 

       if (income > 41444){ 
        double additionalNIC = income - 41444; 
        double resault = additionalNIC * 0.02; 
        this.myIncome = income - (taxed + niced) + resault; 
        summery2(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced,additionalNIC, resault); 

       } 
       else{ 
        this.myIncome = income - (taxed + niced); 
        summery1(myIncome,income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced); 
       } 
      } 
     else{ 
      double tax = 0.45; 
      double nic = 0.12; 
      double personalTAXAllowance = 9440; 
      double personalNICAllowance = 7748; 

      double taxed = (income - personalTAXAllowance) * tax; 
      double niced = (income - personalNICAllowance) * nic; 

       if (income > 41444){ 
        double additionalNIC = income - 41444; 
        double resault = additionalNIC * 0.02; 
        this.myIncome = income - (taxed + niced) + resault; 
        summery2(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced,additionalNIC, resault); 
       } 
        else{ 
         this.myIncome = income - (taxed + niced); 
         summery1(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced); 
        } 
     } 
    } 
    public void clcHourlyRate(double income){ 

     System.out.println("Please enter your hourly rate: \n"); 
     double hourlyRate = input.nextDouble(); 
     System.out.println("Please enter the hours you've worked this week \n"); 
     double hoursWeek = input.nextDouble(); 

     income = ((hourlyRate * hoursWeek) * 4) * 12; 

     if (income <= 32010){ 

      double tax = 0.20; 
      double nic = 0.12; 
      double personalTAXAllowance = 9440; 
      double personalNICAllowance = 7748; 

      double taxed = (income - personalTAXAllowance) * tax; 
      double niced = (income - personalNICAllowance) * nic; 
      this.myIncome = income - (taxed + niced)/12; 
      summery1(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced); 
     } 
     else if (income > 32010 && income <= 150000){ 

      double tax = 0.40; 
      double nic = 0.12; 
      double personalTAXAllowance = 9440; 
      double personalNICAllowance = 7748; 

      double taxed = (income - personalTAXAllowance) * tax; 
      double niced = (income - personalNICAllowance) * nic; 


       if (income > 41444){ 
        double additionalNIC = income - 41444; 
        double resault = additionalNIC * 0.02; 
        this.myIncome = ((income - (taxed + niced))/12) + resault; 
        summery2(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced,additionalNIC, resault); 
       } 
        else{ 
         myIncome = (income - (taxed + niced))/12; 
         myIncome = income - (taxed + niced)/12; 
         summery1(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced); 
        } 
       } 
     else{ 
      double tax = 0.45; 
      double nic = 0.12; 
      double personalTAXAllowance = 9440; 
      double personalNICAllowance = 7748; 

      double taxed = (income - personalTAXAllowance) * tax; 
      double niced = (income - personalNICAllowance) * nic; 

       if (income > 41444){ 

        double additionalNIC = income - 41444; 
        double resault = additionalNIC * 0.02; 
        this.myIncome = ((income - (taxed + niced))/12) + resault; 

        summery2(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced,additionalNIC, resault); 
       } 
        else{ 
         this.myIncome = (income - (taxed + niced))/12; 

         summery1(myIncome, income, tax, nic, personalTAXAllowance,personalNICAllowance,taxed,niced); 
       } 
      } 
     } 
    public double getIncome(){ 
     return myIncome; 
     } 
    } 

Полный список кода.

public class savings { 

    private double v_sav; 

    private DecimalFormat df = new DecimalFormat("###.##"); 
    private Scanner input = new Scanner(System.in); 
    private income myincome = new income(); 

    public void setSavings() { 

     double income = myincome.getIncome(); 

     System.out.println(income); 

     System.out.println("Please enter the amount of months: "); 
     int months = input.nextInt(); 

     df.format(v_sav = income * months); 
     System.out.println("Your savings in " + months + " months"+ "will be: "+ v_sav); 

    } 

    public double getSavings() { 

     return v_sav; 
    } 
} 

Это класс, который использует метод getIncome из объекта Class Income.

public class PFA { 
    public static void main(String[] args) { 

     int option; 

     do{ 
mainMenu(); 
      option = input.nextInt(); 
      if (option > 5){ 
       System.out.println("Please enter a value between 1 and 5"); 
      } 
      else{ 
       if (option == 1){ 
        menuIncome(v_income); 
       } 
       else if (option == 2){ 
        menuExpenses(n_expenses, c_expenses, v_choice, v_exit); 
       } 
       else if (option == 3){ 
        savings mySavings = new savings(); 

        mySavings.setSavings(); 
        System.out.println(mySavings.getSavings()); 
       } 
      } 
     }while (option != 5); 

Главный метод.

+1

Какая частная переменная? – Makoto

+0

'getIncome()' никогда не может вернуть 'null'. –

+0

'double' - тип значения, он не может * возможно * быть' null'. –

ответ

2

Я предполагаю, что у вас есть драйвер, как (это то, что вы имеете в своем 3-м else-if)

public static void main(String[] args) { 
    savings s = new savings(); 
    s.setSavings(); 
    double value = s.getSavings(); 
} 

в этом случае, конечно, это будет 0.0 с линией

double income = myincome.getIncome(); 

в setSavings(), вы не вызывали методы, которые меняют значение myIncome.

В вашем savings классе

private income myincome = new income(); 

создает новый income экземпляр, который, потому что вы не имеете конструктор, инициализирующий значение поля экземпляра myIncome 0. Это значение вы возвращение с getIncome().

Вы не звоните clcSalary() в любом месте. Вы должны сделать это, прежде чем звонить getIncome().

+0

Теперь я вижу, где вы пришли. В том, как я думал - когда будет выполняться код в классе «Доход», если после того, как я перейду в «Сбережения классов» и запустим setSavings, я смог бы получить переменную myIncome, поскольку она уже была инициализирована. Но как вы и @HotLicks указали - он создает новый экземпляр класса, поэтому возвращает класс в исходное состояние. –

+0

@ E.Doroskevic Метод не выполняется, пока вы его не назовете. Конструктор установит некоторые значения по умолчанию для полей экземпляра, которые он явно не инициализирует. 0 для примитивных типов и null для ссылочных типов. –

+0

Вы были бы так добры и сказали бы мне, будет ли способ решить эту проблему без вызова метода clcSalary? –

0

Производятся ли летние функции? В чем ценность myIncome?

Другими словами, если getIncome вызывается прежде, чем любой clcSalary или clcHourlyRate тогда переменная останется 0.

+0

Это единственное, что я вижу. –

+0

Вы вызываете clcSalary или clcHourlyRate перед getIncome? Поскольку, если эти функции не вызывают, значение myIncome никогда не изменится с начального 0. – Tamar

+0

Было бы неплохо добавить объяснение к минусу. – Tamar

Смежные вопросы