2014-11-20 2 views
0

Мои коды используются для расчета CPF, и теперь я работаю над получением возраста человека, поскольку расчет CPF основан на возрастном уровне. Поскольку для CPF для людей, которым меньше 35 лет, их CPF эквивалент «12 * (0,16 + 0,20) * зарплата», и я полагаю, что люди начинают работать в 22 года, поскольку они могут использовать CPF только при их запуске за работой. Поскольку текущая ежемесячная зарплата человека составляет 2000 долларов, и он получил только 10 000 долларов экономии (включая CPF), поэтому после расчета я думаю, что он только начал работать в течение года и еще несколько. Таким образом, мое кодирование должно отображаться в возрасте 23 лет, но insted показывает 0 независимо от того, как я изменил коды, я не знаю, какая часть из них ошибается, и надеюсь, что кто-то может помочь мне разобраться в них. Спасибо.Вывод отображает нуль вместо 23 (правильный вывод) из ниоткуда

А вот мои неполные коды для вывода и ввода:

public class mainclass { 
// The mainclass is an executable class. You should run your program here. 
public static void main(String[] args) { 
    /* cpfCalculator takes in the following 
    * (String name, double savings, double desiredAmt, double salary, String citizen) 
    */ 

    cpfCalculator c = new cpfCalculator("El Salvador", 10000, 70000, 2000, "P", 0.451651); 
    System.out.println("INPUT VALUES"); 
    System.out.println("*************"); 
    System.out.println("Person's Name:" + c.getName() + "_ Savings ($):" + c.getSavings() + "_ Desired Amount ($):" + c.getDesiredAmt()); 
    System.out.println("Salary ($):" + c.getSalary() + "_ Citizen or PR:" + c.getCitizen()); 
    System.out.println(""); 
    System.out.println("OUTPUT VALUES"); 
    System.out.println("*************"); 
    System.out.println(age.getAge()); 
    System.out.println("Employee CPF ($): " + c.getYcpf()); 
    System.out.println("Employer CPF ($): " + c.getBcpf()); 
    System.out.println("Total CPF per year ($): " + c.getTotalCpf()); 
    System.out.println("No of Years needed to achieve desired amount: " + c.getYearsToAchieve()); 
    System.out.println("Hi, " +c.getName() + ", you should " + c.getAdvice()); 
    System.out.println("The CPF accumulation schedule as follows : "); 
    System.out.println("Yr. | CPF/yr ($) | Total Amt ($)"); 
    for (int j = 0; j<=c.getCpfAdviceArray().size()-1; j++){ 
     cpfAdvice wa = c.getCpfAdviceArray().get(j); 
     System.out.println(wa.getYear() + " | " + wa.getCpf() + " | " + (j+1)*wa.getTcpf()); 
    } 

Это те, которые используются для расчета возраста:

public class age { 
private static int age; 
private double salary; 
private double savings; 

    public age() { 
     double a = 12*(0.16 + 0.20) * salary; 
     double b = 2*a; 
     if (a < savings) 
      // only worked for less than one year 
      age = 22; 
     else if(a >= savings && b > salary) 
      // age>22&&age<=35 
      age = 23; 
     else 
      System.out.println("The person hasn't started working."); 
} 
    public age(double salary, double savings) { 
     super(); 
     this.salary = salary; 
     this.savings = savings; 
    } 
    public double getSalary() { 
     return salary; 
    } 
    public void setSalary(double salary) { 
     this.salary = salary; 
    } 
    public void setSavings(double savings) { 
     this.savings = savings; 
    } 
    public double getSavings() { 
     return savings; 
    } 
    public static int getAge() { 
     return age; 
    } 
} 
+0

Вы должны разместить больше кода, чтобы мы могли помочь. Мы должны уметь видеть экземпляр объекта возраста ... – brso05

+0

Вы называете 'setSalary' и' setSavings'? –

+0

Опубликовать весь код ... – brso05

ответ

2

Я думаю, вы не понимаете, как это работает. На самом деле, где ваш Age age = new Age();? это вызовет ваш public age(), но в то время salary или savings не установлены ни в какое значение, потому что вы никогда не устанавливали их или не создавали другой конструктор с этими параметрами.

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

Так создать конструктор с 2 Params: salary и saving, а затем добавить код из другого конструктора это изменит ваш выход нормально;)

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

----- обновление -----

Изменение возрастной класс Age (и переименовать файл Age.java)

public class Age 
{ 
    private int age = -1; 
    private double salary; 
    private double savings; 

public Age() { 
} 
public Age(double salary, double savings) { 
    super(); 
    this.salary = salary; 
    this.savings = savings; 
} 
public double getSalary() { 
    return salary; 
} 
public void setSalary(double salary) { 
    this.salary = salary; 
} 
public void setSavings(double savings) { 
    this.savings = savings; 
} 
public double getSavings() { 
    return savings; 
} 
public int getAge() { 
    computeAge(); 
    return age; 
} 

public void computeAge() 
{ 
    double a = 12*(0.16 + 0.20) * salary; 
    double b = 2*a; 
    if (a < savings) 
     // only worked for less than one year 
     age = 22; 
    else if(a >= savings && b > salary) 
     // age>22&&age<=35 
     age = 23; 
    else 
     System.out.println("The person hasn't started working."); 
} 

}

Но Эйдж очень странное имя для класса потому, что это не совсем то, что это ...

затем назвать его:

cpfCalculator c = new cpfCalculator("El Salvador", 10000, 70000, 2000, "P", 0.451651); 
System.out.println("INPUT VALUES"); 
System.out.println("*************"); 
System.out.println("Person's Name:" + c.getName() + "_ Savings ($):" + c.getSavings() + "_ Desired Amount ($):" + c.getDesiredAmt()); 
System.out.println("Salary ($):" + c.getSalary() + "_ Citizen or PR:" + c.getCitizen()); 
System.out.println(""); 

Age a = new Age(c.getSalary(), c.getSavings()); // ADD this line 

System.out.println("OUTPUT VALUES"); 
System.out.println("*************"); 
System.out.println(age.getAge()); 
+0

Вы действительно прочитали мой ответ, потому что я объясняю, почему он не работает ... –

+0

да, я сейчас меняюсь и надеюсь, что это сработает :) –

+0

Так что мне также нужно добавить« Возраст » = new Age() '? –

1

У вас нет else, так что ваш age фактически не не устанавливался:

if (a < savings) 
    // only worked for less than one year 
    age = 22; 
else if(a >= savings && b > salary) 
    // age>22&&age<=35 
    age = 23; 
else 
    age = DEFAULT_AGE; 

Просто определить DEFAULT_AGE.

Это происходит потому, что в то время, когда вы вызываете свой конструктор, salary - 0.0d. умножение 0 на что угодно всегда 0. Наконец, вы проверяете, что a (=0.0D) < savings (=0.0D), который является false и b (=0.0D) > salary (=0.0D), равно false.

Поэтому age никогда не устанавливается.

+0

Есть ли что-нибудь еще, что я должен установить? Потому что он все еще не работает :( –

+0

и я думал, что размер зарплаты должен зависеть от моего ввода? –