为什么我的JavaScript质数生成器不工作
Why does my JavaScript Prime Number-Generator not work?
这个程序的目的是列出从1开始的所有素数。我完全是个新手。我开始用c++写这个(不成功),然后翻译成这个(JS)。我意识到一些问题,但不知道如何解决它们:处理全局变量,写取代,写入前没有超时等。重要的是我使用外部JS文件?总之,我如何使它工作?
<!doctype html>
<html>
<head>
<script>
var number = 3; //to be run through the prime test
var prime = [2]; //numbers found to be prime
var found = 1; //counter for primes found
var runs = 0; //counter for times number has been tested
//numbers are tested against all smaller found primes
function test()
{
window.scroll(0,document.height); //automatically view the latest prime
var line = document.createElement("div");
while(runs < found && (prime[runs] < (number / 2))) //has number passed all tests
{
if(number % prime[runs] !== 0) //is number divisible by smaller prime
{
runs = runs + 1; //number passed a test
}
else //number is not prime
{
number = number + 1; //next number generated
runs = 0; //reset test counter for next number
setTimeout(test, 100); //start running next number tests
}
} //number passed all tests
line.innerHTML = number; //prime number displayed
document.body.appendChild(line);
prime[found] = number; //prime number saved for testing
found = found + 1; //counter for found is increased
number = number + 1; //next number generated
runs = 0; //reset test counter for next number
setTimeout(test, 100); //start running next number tests
}
</script>
</head>
<body>
<form>
<input type="button" onclick="test()">
</form>
</body>
</html>
在数学方面,
var prime = [1];
1
不是素数,由于1
能整除所有数,所以
while (runs < found) //has number passed all tests
{
if (number % prime[runs] !== 0) //is number divisible by smaller prime
{
runs = runs + 1; //number passed a test
}
else //number failed a test
{
number = number + 1; //next number generated
runs = 0; //reset test counter for next number
setTimeout(test, 1000); //start running next number tests
}
} //number passed all tests
总是进入runs = 0
的else
支路。
您可以从var prime = [2];
或var prime = [];
和var found = 0;
开始。
注意事项:
-
for (runs < found)
你似乎想要一个
while
循环。for
循环不能仅由一个条件组成。 -
document.writeln()
不能在document
加载完成且关闭后使用。在此之后使用它们将重新打开document
,将其重置为空白。在此之后修改DOM,您需要使用
innerHTML
或document.createElement()
和element.appendChild()
。var line = document.createElement('div'); line.innerHTML = number; document.body.appendChild(line);
-
为了避免无限递归并给UI线程一个更新页面显示的机会,您可以在再次调用
test
时使用计时器:setTimeout(test, 100);
相关文章:
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 我的django模板布尔变量是't在javascript中按预期工作
- 为什么不是'我的JS滑块正在工作
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 为什么jquery悬停在jsfiddle中可以工作,而在我的html布局中却不能
- 为什么这个jQuery可以作为一个小提琴工作,但在我的网页上没有
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- 由于某种原因,我的JavaScript函数无法工作
- 为什么获胜'我的自定义功能工作
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 我的动画没有按预期工作
- 为什么不是't我的“;虚拟的“;阵列工作
- 为什么动态加载的事件在我的代码中不能正常工作
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- 关于使用.className的建议,目前还没有;我不能在我的圈子里工作
- onbeforeunload事件在我的代码中没有触发,但其他示例可以工作
- 如何获得所需的自动对焦验证以在 html 表单上工作?- 我的尝试无法验证
- 为什么不工作我的函数xmlParser().请帮帮我
- 点击后不工作我的功能
- 不工作我的ajax调用函数myalert()