Javascript 为什么这个while循环会导致无限循环?
由于某种原因,我很难让这个while循环正常工作。每当我尝试测试它时,它总是会使我的浏览器崩溃,有一次我能够在控制台中看到循环的结果,我所看到的只是NaN打印了几次。我的代码中有什么我忘记的吗Javascript 为什么这个while循环会导致无限循环?,javascript,html,while-loop,Javascript,Html,While Loop,由于某种原因,我很难让这个while循环正常工作。每当我尝试测试它时,它总是会使我的浏览器崩溃,有一次我能够在控制台中看到循环的结果,我所看到的只是NaN打印了几次。我的代码中有什么我忘记的吗 <div id="output"></div> <script> var starting = prompt("What is your starting balance?"); var target = prompt("What is your target ba
<div id="output"></div>
<script>
var starting = prompt("What is your starting balance?");
var target = prompt("What is your target balance?");
var interest = prompt("What is your interest rate?");
var periods = 0;
var current = starting;
var greaterThan = false;
while (greaterThan === false) {
if (current < target) {
current = current + (current * interest);
periods++;
} else {
greaterThan = true;
alert("it took " + periods + " periods to make your starting balance greater than your target balance.");
document.querySelector('#output').textContent = "to grow an initial investment of " + starting + " to " + target + " at a " + interest + " interest rate will require " + periods + " investment periods.";
}
}
</script>
var start=prompt(“您的起始余额是多少?”);
var target=prompt(“您的目标余额是多少?”);
var利息=提示(“您的利率是多少?”);
var周期=0;
无功电流=启动;
var greaterThan=假;
while(大于===false){
如果(当前<目标){
当前=当前+(当前*利息);
句号++;
}否则{
大于等于真;
警惕(“需要“+周期+”周期才能使你的起始平衡大于目标平衡。”);
document.querySelector(“#output”).textContent=“要以“+利息+”利率将“+起始+”的初始投资增长到“+目标+”,将需要“+期间+”投资期。”;
}
}
我看到的一个问题是,所有的输入值都是字符串,而不是数字,因此它们进行的是字符串比较,而不是数字比较
var starting = +prompt("What is your starting balance?") ||0;
var target = +prompt("What is your target balance?")||0;
var interest = +prompt("What is your interest rate?")||1;
prompt()
前面的+
是运算符您忘记了将prompt的结果从字符串转换为数字
var starting = parseFloat(prompt("What is your starting balance?"));
对用户从提示符输入的其他数字执行相同的操作。首先,您需要将输入转换为整数值。来自提示符的输入是一个字符串。即使您输入1、10或任何数字。您可以使用parseInt()实现这一点。因为你要的是利率,我想任何用户都会输入类似于2的内容。5,或10作为百分位数。不是0.1,也不是0.05。即使他这样做了,parseInt()函数也无法正确执行,因为0.05不是整数值。您可以使用parseFloat来实现这一点。因此,我建议您看看下面代码的实现。另外,我省略了if-else语句,因为它们不是必需的,只会使代码更加复杂
<div id="output"></div>
<script type="text/javascript">
var starting = parseInt(prompt("What is your starting balance?"));
var target = parseInt(prompt("What is your target balance?"));
var interest = parseInt(prompt("What is your interest rate?"));
var periods = 0;
var intrate = interest/100;
var current = starting;
while (current< target) {
current += (current*intrate);
periods += 1;
}
alert("it took " + periods + " periods to make your starting balance greater than your target balance.");
document.querySelector('#output').textContent = "to grow an initial investment of " + starting + " to " + target + " at a " + interest + " interest rate will require " + periods + " investment periods.";
</script>
var start=parseInt(提示(“您的起始余额是多少?”);
var target=parseInt(提示(“您的目标余额是多少?”);
var利息=parseInt(提示(“您的利率是多少?”);
var周期=0;
var intrate=利息/100;
无功电流=启动;
while(当前<目标){
电流+=(电流*内部);
周期+=1;
}
警惕(“需要“+周期+”周期才能使你的起始平衡大于目标平衡。”);
document.querySelector(“#output”).textContent=“要以“+利息+”利率将“+起始+”的初始投资增长到“+目标+”,将需要“+期间+”投资期。”;
您是否尝试将断点设置为greaterThan=true并验证代码是否达到此值?您必须将字符串转换为int。(parseInt
)+null返回0。比parseFloat好得多,因为它不会返回NaN。@hani,除非这是您想要的行为。人们可能不想将null转换为零,因为null意味着他们点击了cancel。你应该如何区分键入0和单击取消之间的区别?@Arun P Johny在本例中,你正在执行OR,这意味着如果他们单击取消,他们仍然得到0(null | | 0)。在提示符前还有一个加号,如果点击cancel(+null),则再次将其设为0