2010-11-13 2 views
0

J'essaie de faire une application pour Android qui fait des calculs RMD. Le programme, cependant, continue à donner 0.0.Le calcul de distribution minimum requis ne fonctionne pas

Je pense que mon problème réside dans ce code:

package com.MinDis.android; 

import java.util.*; 
import java.text.*; 

public class RMD 
{ 
double balance; 
double rmd; 
long age; 
String bdate; 
SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy"); 

Date current = new Date(); 
public void setBalance(double i) 
{ 
    balance = i; 
} 

public double getBalance() 
{ 
    return balance; 
} 

public void setBDate(String h) 
{ 
    bdate = h; 
} 

public long getAge() throws Exception 
{ 

    Date birthd = sd.parse(bdate); 
    long cur; 
    long birth; 
    long diff; 

    cur = current.getTime(); 
    birth = birthd.getTime(); 
    diff = cur - birth; 
    age = (diff/(24*60*60*1000))/365; 
    return age; 
} 

public double getRMD() 
{ 

    if (age == 70) 
    { 
    rmd = balance/27.4; 
    } 

    if (age == 71) 
    { 
    rmd = balance/26.5; 
    } 

    if (age == 72) 
    { 
    rmd = balance/25.6; 
    } 

    if (age == 73) 
    { 
    rmd = balance/24.7; 
    } 

    if (age == 74) 
    { 
    rmd = balance/23.8; 
    } 

    return rmd; 
} 
} 

J'ai essayé avec equals(), mais il se plaint que je tentais de déréférencer la valeur à long. En outre, je suis conscient que java.util.Date est obsolète, mais je ne veux pas essayer les autres classes. De ma première application Android, j'ai compris que le "==" ne fonctionne pas, mais je ne sais pas quoi faire ici.

J'ai vérifié que l'entrée pour un solde et les valeurs de date de naissance ont été acceptées, de sorte que c'est ainsi que je l'ai limité à cette classe particulière.

Répondre

0

J'ai résolu le problème. J'ai changé les conditionals à une instruction switch, puis utilisé

switch((int)getAge()) 
0

Le problème est que si quelque chose appelle getAge, le champ d'âge n'a jamais été attribué se. Une fois que getAge est appelé, acquiert-il une valeur. Donc, si getRMD est appelé avant getAge, alors aucune des conditions if ne sera vraie, donc rmd ne serait pas défini, et donc la valeur d'origine de 0 resterait. J'éviterais d'avoir rmd et age comme champs de la classe. Au lieu de cela, ils devraient être des variables locales des fonctions qui les calculent ou les utilisent.

Questions connexes