问题描述
||
我正在尝试编写一种方法来确定一个人的年龄平方是否等于当前年份。例如,一个男人在1849年才43岁,而43的平方是1849。
以下是我的代码,但我不知道为什么我的异常无法正常工作,因为假定没有人可以活到123年以上
public Boolean isAlive(int y){
assert( y>=1888 && y<=2134);
int age=0;
while(age<=123){
y=y+1;
age=age+1;
if(age*age==y){
int c=age;
return true;
}
}
return false;
}
解决方法
您尝试解决的问题似乎是
y + n = n^2
其中y
是开始年份,n
是年龄,并且两者都必须是正整数。
重新排列这是
n = (sqrt(1 + 4 * y) + 1)/2;
例如
当y = 1806时,n = 43,n + y = n * n = 1849。
当y = 1980时,n = 45,n + y = 2025,n * n = 2025。
所以你可以写
public boolean squareAgeIfBorn(int year) {
double n = (Math.sqrt(1 + 4 * year) + 1) / 2;
return Math.abs(n - (long) n) < 1e-9; // i.e. if n is a whole number.
}
,您可以轻松得多:
public boolean isAlive(int age){
int year = Calendar.getInstance().get(Calendar.YEAR);
return year == age * age;
}
,我没有捕获您的代码,但是从描述中我认为您想检查某人的年龄平方是否等于当年
不要使用断言
年龄的平方
获取当前年份
比较2 == 3