2015-02-12 83 views
0

我有一个因子查找程序,我已经编程,应该开始检查输入框中输入的值是1还是0,因此它会显示“因子1是1”。或“0的因子是0”,但是当我在输入框中输入数字0时,它显示“因子为0”。但我无法弄清楚为什么。这可能是一个简单的错误,我无法弄清楚。这是我的代码。 HTML:功能不显示正确的结果

<!DOCTYPE HTML> 

<html lang="en"> 
    <head> 
     <title>JavaScript</title> 
     <script type="text/javascript" src="javaScript/prime.js"></script> 
    </head> 
    <body> 
     <!--Number--> 
     <h1>Factor finder</h1> 
     <p>Enter a number to find the factors!</p> 
     <form name="prime" id="here"> 
      Number: 
      <input class ="enter2" type="text" name="primeinput" size ="20"/> 
      <input type="button" name="addnumber" value="Go" onclick="findFactor();"/> 
      <br /> 
      <h2>Results</h2> 
     </form> 
    </body> 
</html> 

JavaScript的:

//counters 
var numbernum = 0; 
var numinput = 1; 
//function 
function findFactor(){ 
    var array = new Array(); 
    //get input 
    thenumber=document.prime.primeinput.value; 
    //special circumstances for 1 and 0 
    if (thenumber == 1 || thenumber == 0){ 
     amount = "The factor of "; 
     verb = " is "; 
    } else{ 
     amount = "The factors of "; 
     verb = " are "; 
    } 
    //factor finder 
    for (i=1; i<thenumber + 1; i++){ 
     //check to see if the number is a factor 
     if(thenumber % i == 0){ 
      //check if the number is 1 or 0 to state the factors are 1 or 0 
      //not working with 0    
      if(thenumber == 1 || thenumber == 0){ 
       if (thenumber == 1){ 
        array[0] = 1; 
       } else if (thenumber == 0){ 
        array[0] = 0; 
       } 
      //if the number isn't 0 or 1 
      } else if(thenumber != 1 && thenumber != 0){ 
       if (thenumber == numinput){ 
        array[numbernum] = "and " + numinput; 
       } else{ 
        array[numbernum] = numinput; 
        numbernum ++ 
      } 

     } 

    } 
    numinput ++ 
} 
//append to the HTML 
var make = document.createElement("p"); 
var apply = document.createTextNode(amount + thenumber + verb + array.join(", ") + "."); 
make.appendChild(apply); 
document.getElementById("here").appendChild(make); 
//reset counters and clear array 
numbernum = 0; 
numinput = 1; 
var array = 0; 
} 
+0

如果'thenumber'是'0',循环立即终止,因为'1 <数量写+ 1'是假的。 – Barmar 2015-02-12 01:29:43

+1

顺便说一句,你不需要'else if(then number!= 1 && thenumber!= 0)',只需使用'else'。这与'if'条件相反,'else'只在'if'为假时才执行。 – Barmar 2015-02-12 01:33:43

回答

0

01的特殊情况下,不与for循环打扰,因为你知道正确的结果应该是什么。这样就把iffor外:

if (thenumber < 2) { 
    array[0] = thenumber; 
} else { 
    for (var i = 1; i <= thenumber; i++) { 
     if (thenumber % i == 0) { 
      array.push(i); 
     } 
    } 
} 
0

的用于不由于这个循环:

为(I = 1;我< + 1

尝试将其更改为

(i = 1;我< =数量写