的Javascript做while循环不停止
问题描述:
我想创建一个计算采取起始号,结束数和步数由步长值,以显示所有甚至开始和结束计数之间的数字。
似乎是坏了我的循环的逻辑,因为它不会停止和崩溃。的Javascript做while循环不停止
<!DOCTYPE html>
<html>
<body>
<h2>JFinding all even numbers</h2>
<p>Please input a starting number, ending number and step number:</p>
Starting Number: <input id="start">
Ending Number: <input id="end">
Step by Number: <input id="step">
<button type="button" onclick="myFunction()">Submit</button>
<p id="demo"></p>
<script>
function myFunction() {
var start, end, step, text;
var result = [];
// Get the value of the start number with start var
start = parseInt(document.getElementById("start").value);
// Get the value of the end number with end var
end = parseInt(document.getElementById("end").value);
// Get the value of the step number with step var
step = parseInt(document.getElementById("step").value);
console.log('start', start);
console.log('end', end);
console.log('step', step);
// If start, end, or step is Not a Number or step is not even or start is greater than end or step is greater than end or start and step are equal to end
if (isNaN(start) || isNaN(end) || isNaN(step) || step % 2 !== 0 || start > end || step > end || step === end || start === end) {
//display text for invalid input
text = "Input not valid";
//display text to html page
document.getElementById("demo").innerHTML = text;
//else create a loop to find even numbers
} else {
if(start % 2 === 0){
for(var i = start; i <= end; i += step){
result.push(i);
}
} else {
start += 1;
for(var i = start; i <= end; i += step){
result.push(i);
}
}
//sent the result to the html page
document.getElementById("demo").innerHTML = result;
}
console.log(result);
}
</script>
</body>
</html>
答
我想你想要做的是有
sum = start
循环之前。而
sum += step
循环
答
问题里面是你的代码的第三个最后一行。该行即将向VAR和推到结果的末尾,但你是推启动变量,而不是,这就是为什么循环没有停止
答
无段差开始在循环过程正在发生变化,从而总和后不改变每次迭代。
你可以改变你的代码如下:
sum = start;
do {
sum += step;
result.push(start);
}
你也可以使用一个FOR循环使用更加简单的语法来实现相同的行为。
答
几个问题:
- 当Chrome浏览器测试,我需要parseInt函数()的值与他们为了工作
- isNaN只接受一次
- 1个参数在while循环,我们需要增加金额,如用
+=
或sum = sum + step
- 我们要保存的总和,而不是起始值
- 我们还需要检查,看是否总和是有效的,甚至,数
- 另外,do-while循环可能会非常棘手,而条件树立正确的,让你没有做一对多或过少的迭代来获得迭代。正如我们所看到的,如果我们没有把所有的东西都设置正确,他们可以轻松地运行。有了这样的话,我建议你尝试一个for循环
<!DOCTYPE html>
<html>
<body>
<h2>JFinding all even numbers</h2>
<p>Please input a starting number, ending number and step number:</p>
Starting Number: <input id="start">
Ending Number: <input id="end">
Step by Number: <input id="step">
<button type="button" onclick="myFunction()">Submit</button>
<p id="demo"></p>
<script>
function myFunction() {
var start, end, step, text;
var result = [];
// Get the value of the start number with start var
start = parseInt(document.getElementById("start").value);
// Get the value of the end number with end var
end = parseInt(document.getElementById("end").value);
// Get the value of the step number with step var
step = parseInt(document.getElementById("step").value);
console.log('start', start);
console.log('end', end);
console.log('step', step);
// If start, end, or step is Not a Number or step is not even or start is greater than end or step is greater than end or start and step are equal to end
if (isNaN(start) || isNaN(end) || isNaN(step) || step % 2 !== 0 || start > end || step > end || step === end || start === end) {
//display text for invalid input
text = "Input not valid";
//display text to html page
document.getElementById("demo").innerHTML = text;
//else create a loop to find even numbers
} else {
for(var i = start; i <= end; i += step){
if(i % 2 === 0){
result.push(i);
}
};
//sent the result to the html page
document.getElementById("demo").innerHTML = result;
}
}
</script>
</body>
</html>
还要注意的是,代码需要的步骤是偶数:step % 2 !== 0
,所以我们唯一的出路如果起始数字也是一样的话,会得到任何结果。
'sum'不会提升过去'启动+ step'因为'总和=开始+步骤,'你可能要为start初始化的金额,然后把上面一行'总和+ =步;' – James