年龄计算始终偏离一

时间:2019-06-04 10:36:51

标签: java computation off-by-one

任务是创建一个函数。

该函数带有两个参数:

  • 当前父亲的年龄(岁)
  • 儿子的当前年龄(岁)

算出父亲多少年前是儿子的两倍(或多少年后他才是儿子的两倍)。

public static int TwiceAsOld(int dadYears, int sonYears){

    int dadYearsTemp = dadYears;
    int years = 0;
    int yearsAgo = 0;

    for (int i = 0; i <= dadYears; i++ ){
        if (dadYearsTemp / 2 == sonYears) {
            years = dadYearsTemp;
            yearsAgo = dadYears - years;
            System.out.println(yearsAgo);
            return yearsAgo;
        }
        else if (sonYears * 2 > dadYears) {
            years = (sonYears * 2) - dadYears;
            System.out.println(years);
            return years;
        }
        dadYearsTemp = dadYearsTemp -1;
    }

    return 42; // The meaning of life

}

例如,在输入(30,7)的情况下,我希望函数返回16,因为16年前父亲是14岁,这意味着他的年龄是现在儿子的两倍(7)。但是我的函数返回15。

我想这不是一个大错误,但是老实说我无法找出为什么它不起作用,所以我会提供一些帮助。

2 个答案:

答案 0 :(得分:1)

让父亲的当前年龄= f

儿子的当前年龄= s

让我们回想x年前,父亲的年龄是儿子的两倍。

然后2(s-x)=(f-x) => x = 2 * s-f

注意:如果x变为负数,则x年后,父亲的年龄将是儿子的两倍(测试输入[25,5])

public static void main(String[] args) {
    int x = twiceAsOld(25, 5);
    System.out.println(x);
  }

  public static int twiceAsOld(int dadYears, int sonYears) {
    return 2*sonYears - dadYears;

  }

答案 1 :(得分:-1)

下面是示例代码,该示例代码使用示例数据计算父亲多大以前是儿子的两倍。

getGames(){
    let query = HOMELF1_NEXT_GAMES;
    var data = {
        "query": query,
        "variables": null
    }
    fetch(URL_FEB_API, {
        method: "POST",
        headers: {
            "Accept"        :   "application/json",
            "content-type"  :   "application/json"
        },
        body: JSON.stringify(data)
    })
    .then(response => {
        return response.json()
    })
    .then(data => {
        console.log("End query");
        return data;
    })
    .catch(err => {
        console.log("Error: " + err)
    })
}

async getData(){
    console.log("Before getGames");
    let games = await this.getGames();
    console.log("After getGames");
    console.log("games: " + games.length)
}

componentDidMount(){
    this.getData();
};