为什么这个简单的JavaScript代码不起作用?

时间:2015-01-04 20:23:18

标签: javascript

代码应该检查前几个三角形数字是否为素数(它们不是),但它不会运行。

<!DOCTYPE HTML>
<html>
<head><title>C1E9P1</title>
<script>

for(i = 3; i < 13; i++){
    prime = true;
    n = (i*(i+1))/2;
    for(i = 2; i < Math.sqrt(n)+1; i++){
        if(n%i == 0){
            prime = false;
        }
    }
    if(prime){
        document.write(n+" is prime.");
        document.write("<br>");
    } else {
        document.write(n+" is composite.");
        document.write("<br>");
    }
}


</script>
</head>
</html>

4 个答案:

答案 0 :(得分:5)

您为嵌套的两个循环使用了相同的变量!

for(i = 3; i < 13; i++){  <-- i
    for(i = 2; i < Math.sqrt(n)+1; i++){ <-- i

答案 1 :(得分:2)

试试这个并查看你的JavaScript控制台:

&#13;
&#13;
for(var i = 3; i < 13; i++){
    var prime = true;
    var n = (i*(i+1))/2;
    for(var j = 2; j < Math.sqrt(n)+1; j++){
        if(n%j == 0){
            prime = false;
        }
    }
    if(prime){
        console.log(n+" is prime.");
        console.log("<br>");
    } else {
        console.log(n+" is composite.");
        console.log("<br>");
    }
}
&#13;
&#13;
&#13;

答案 2 :(得分:1)

我修改了脚本,但不知道算法是否正确。

for(var i = 3; i < 13; i++){
    var prime = true;
    var n = (i*(i+1))/2;
    for(var j = 2; j < Math.sqrt(n)+1; j++){
        if(n%j == 0){
            prime = false;
        }
    }
    if(prime){
        document.write(n+" is prime.");
        document.write("<br>");
    } else {
        document.write(n+" is composite.");
        document.write("<br>");
    }
}

答案 3 :(得分:1)

您应该将内部for循环的变量名称更改为i以外的其他名称。

for(i = 3; i < 13; i++){
  prime = true;
  n = (i*(i+1))/2;
  for(j = 2; j < Math.sqrt(n)+1; j++){
    if(n%j == 0){
        prime = false;
    }
}

那之后你应该都很好。