为什么在某些情况下我的for-loop不会启动?

时间:2015-10-06 09:11:42

标签: javascript for-loop division

我在javascript中写了一个简单的代码,让你输入一个间隔的起始值和结束值,并指定一个分母。在输入之后,程序将进入间隔并检查有多少数字可被指定的分母整除。

一开始似乎工作正常,但在某些情况下程序根本不会运行循环,我很难搞清楚原因。

我的代码:

//declarations
var startValue = prompt ("pick a starting value:");
var endValue = prompt ("pick an ending value:");
var divide = prompt ("pick a denominator");
var count = 0;

//control divisibility
for (startValue; startValue <= endValue; startValue++) {
 var quotient = startValue/divide;
  if (quotient % 1 == 0) {
   count++; 
  }
}

//result
alert("There are " + count + " numbers divisible by " + divide + " in the interval");

以下是一些已经使用/未使用该程序的输入值 (显示为“startNr,endNr,divide”):

工作:
3,92,8 1,100,1 17,200,12 24,379,22
18,90,18

不工作:
5,25,5 7,21,7 2,108,8

感谢。

1 个答案:

答案 0 :(得分:2)

此处的问题是prompt将输入作为字符串返回,而您不会将其转换为数字。

比较字符串时,会应用词典排序,例如,基于此类排序,"25"出现在"5"之前

&#13;
&#13;
console.log("25" < "5");
&#13;
&#13;
&#13;

所以你应该用以下代码替换你的声明:

var startValue = Number(prompt ("pick a starting value:"));
var endValue = Number(prompt ("pick an ending value:"));
var divide = Number(prompt ("pick a denominator"));

作为旁注,由于你除以divide,你也应该检查它不是零!

或者,甚至更好,而不是执行实际的除法然后检查商,只需像@hindmost建议那样:

for (startValue; startValue <= endValue; startValue++) {
  if (startValue % divide == 0) {
   count++; 
  }
}