JavaScript增长人口问题:代码返回错误的答案

时间:2019-04-15 15:50:26

标签: javascript function for-loop rate

我有以下问题:

在一个小镇里,人口在年初是p0 = 1000。人口每年定期增长2%,并且每年有50多个新居民居住在该镇。该镇需要多少年才能看到其人口大于或等于p = 1200个居民?

下面是我的代码:

function nbYear(p0, percent, aug, p) {    
  for (var i=0; p0 < p; i++){
    p0 = p0 * (1 + percent/100) + aug;     
    return i
  }
}        
nbYear(1000, 2, 50, 1200)

我的解决方案返回0,这是错误的。正确答案是3。我知道如果我删除了{},它将为我提供正确的答案。但是我想了解我的代码出了什么问题。为什么返回0?

2 个答案:

答案 0 :(得分:0)

您需要检查p0(增加的人口)的值,并根据此值返回i

function nbYear(p0, percent, aug, p) {

  var i = 0;
  while (true) {
    if (p0 >= p) {return i;}
    p0 = p0 * (1 + percent/100) + aug; i++;
  }
}
nbYear(1000, 2, 50, 1200)

为了了解您的代码出了什么问题,您需要了解return语句和for循环的工作方式。如果您在循环内不带任何条件返回i的值,则无论如何都将执行return语句。因此,您的函数将始终返回i的初始值0

答案 1 :(得分:0)

function nbYear(p0, percent, aug, p) {

var population_perc = p0 * percent/100;

population_total = p0 + (population_perc) + aug ;

var number_of_years = 1;

while(population_total < p)
{        

    population_perc = population_total * percent/100;
        population_total = population_total + population_perc + aug;
        number_of_years += 1;
    
 }
          
        return number_of_years;
} 

通过上面的代码,您将了解问题所在。您不能在for循环中使用“返回”。这就是导致此错误的原因。