我有以下问题:
在一个小镇里,人口在年初是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?
答案 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循环中使用“返回”。这就是导致此错误的原因。