页面崩溃(可能是由于多维数组?)
Page crashing (possibly due to multidimensional arrays?)
我的程序中有一个我无法弄清楚的超级奇怪的错误。这是代码的 fiddle:https://jsfiddle.net/JocaPinto/tb07smte/4/
我的问题是,如果你点击那个按钮的次数足够多,页面就会崩溃,至少在我的电脑上是这样。当我开始使用多维数组时就发生了这种情况,但我尝试只使用一维数组,结果仍然一样。为什么会崩溃?有没有我监督的无限循环?
感谢回答者!!
此外,出于某种原因 Stack Overflow 说我需要 post 除了 link 之外的代码所以这里是:
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var previousText = $("#taskText").text();
var randTaskNum = Math.floor(Math.random() * tasks.length);
do {
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button onclick='nextTask()'>Click me</button>
<p id='taskText'>Task goes here</p>
如果您遇到的任务未能通过您的 "while" 检查,它永远不会失败。您不会在 do...while 循环中生成 randTaskNum,因此它永远不会改变。你的循环永远运行。将 randTaskNum 赋值移动到 do...while 循环内部。
当您随机分配同一个数字两次时会发生这种情况。由于您的随机数是在循环外生成的,因此 previousText == $("#taskText").text()
将始终评估为真,因为您永远不会更改该数字。快速解决方法是在循环中移动随机数:
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var previousText = $("#taskText").text();
do {
var randTaskNum = Math.floor(Math.random() * tasks.length);
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
}
Fiddle : https://jsfiddle.net/tb07smte/5/
更好的解决方法是防止随机数等于最后一个。
如果 previousTask 最终与您在函数中选择的随机任务相同,它将陷入无限循环。为了解决这个问题,选择下一个随机任务后分配上一个任务。
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var randTaskNum = Math.floor(Math.random() * tasks.length);
do {
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
var previousText = $("#taskText").text();
}
我的程序中有一个我无法弄清楚的超级奇怪的错误。这是代码的 fiddle:https://jsfiddle.net/JocaPinto/tb07smte/4/ 我的问题是,如果你点击那个按钮的次数足够多,页面就会崩溃,至少在我的电脑上是这样。当我开始使用多维数组时就发生了这种情况,但我尝试只使用一维数组,结果仍然一样。为什么会崩溃?有没有我监督的无限循环?
感谢回答者!!
此外,出于某种原因 Stack Overflow 说我需要 post 除了 link 之外的代码所以这里是:
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var previousText = $("#taskText").text();
var randTaskNum = Math.floor(Math.random() * tasks.length);
do {
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button onclick='nextTask()'>Click me</button>
<p id='taskText'>Task goes here</p>
如果您遇到的任务未能通过您的 "while" 检查,它永远不会失败。您不会在 do...while 循环中生成 randTaskNum,因此它永远不会改变。你的循环永远运行。将 randTaskNum 赋值移动到 do...while 循环内部。
当您随机分配同一个数字两次时会发生这种情况。由于您的随机数是在循环外生成的,因此 previousText == $("#taskText").text()
将始终评估为真,因为您永远不会更改该数字。快速解决方法是在循环中移动随机数:
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var previousText = $("#taskText").text();
do {
var randTaskNum = Math.floor(Math.random() * tasks.length);
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
}
Fiddle : https://jsfiddle.net/tb07smte/5/
更好的解决方法是防止随机数等于最后一个。
如果 previousTask 最终与您在函数中选择的随机任务相同,它将陷入无限循环。为了解决这个问题,选择下一个随机任务后分配上一个任务。
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var randTaskNum = Math.floor(Math.random() * tasks.length);
do {
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
var previousText = $("#taskText").text();
}