确定方法是将人的年龄的平方==等于当前年份

问题描述

|| 我正在尝试编写一种方法来确定一个人的年龄平方是否等于当前年份。例如,一个男人在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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...