我正在尝试为执行RMD计算的Android制作应用。然而,该计划一直给出0.0。
我认为我的问题在于此代码:
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;
}
}
我尝试使用.equals(),但它抱怨我试图取消引用长值。另外,我知道java.util.Date已被弃用,但我不想尝试其他类。从我的第一个Android应用程序,我发现“==”不起作用,但我不知道该怎么做。
我已经确认平衡输入和生日值被接受了,所以我就把它限制在这个特定的类中。
答案 0 :(得分:0)
我解决了这个问题。我将条件更改为switch语句,然后使用
switch((int)getAge())
答案 1 :(得分:0)
问题在于,除非调用getAge,否则永远不会分配年龄字段。只有一次调用getAge,它才会获得一个值。因此,如果在getAge之前调用getRMD,则所有if条件都不为真,因此不会设置rmd,因此原始值0将保留。我会避免让rmd和age成为班级的领域。相反,它们应该是计算它们或使用它们的函数的局部变量。