2015-10-17 73 views
5

我遇到了一個我似乎無法解決的問題。請看下面的代碼:Javascript代碼運行良好...幾乎所有的時間

<script> 
    function createFunctions() { 
     var first = ["", "", ""]; 
     var second = ["", "", ""]; 
     var func = ["", ""]; 
     var sign = ["", ""]; 
     for (i = 0; i < 3; i++) { 
      first[i] = (Math.round(Math.random() * 9) + 1); 
      second[i] = (Math.round(Math.random() * 9) + 1); 
      sign[i] = (Math.round(Math.random())); 
      if (sign[i] == "1") { 
       sign[i] = '+'; 
      } else { 
       sign[i] = '-'; 
      } 
      if (first < 2) { 
       func[i] = 'f(x) = x ' + sign[i] + ' ' + second[i] + '<p>'; 
      } else { 
       func[i] = 'f(x) = ' + first[i] + 'x ' + sign[i] + ' ' + second[i] + '<br>'; 
      } 
     } 
     for (i = 0; i < 3; i++) { 
      document.getElementById("createFunctions").innerHTML += 'Function ' + [i + 1] + ': ' + func[i]; 
     } 
     //whichFunction= 
     findAnswers(first, second, sign); 
    } 

    function findAnswers(first, second, sign, rand) { 
     var num = ["", "", ""]; 
     rand = (Math.round(Math.random() * 1)); 
     document.getElementById("findAnswers").innerHTML = 'Which <b>one (or more)</b> of these functions holds true, when plugged in with the following <b>values of x</b>? (' + [rand + 1] + ')<br>'; 
     for (i = 0; i < 3; i++) { 
      num[i] = (Math.round(Math.random() * 9)); 
     } 
     for (i = 0; i < 3; i++) { 
      ans = 0; 
      if (sign[rand] == "+") { 
       ans = [first[rand] * num[i]] + second[rand]; 
      } else { 
       ans = [first[rand] * num[i]] - second[rand]; 
      } 
      document.getElementById("findAnswers").innerHTML += [i + 1] + '. You put in a ' + num[i] + ': ' + ans + '<br>'; 
     } 
    } 
</script> 

<BODY onload=createFunctions()> 
    <b>A Machine Called Effex</b> 
    <p><input type="button" value="New Examples" onclick="history.go(0)" VALUE="Refresh"></p> 
    <p id="createFunctions"></p> 
    <p id="findAnswers"></p> 

一切都很好。除了偶爾計算函數時,代碼將乘以x,然後簡單地將第二個值連接到第一個,而不是添加(或減去)。

+1

不應該是第15行的第一個[i] <2'嗎? – mynawaz

+2

嘗試在第36和38行的'[first [rand] * num [i]] + second [rand]'中將最外方括號更改爲圓括號,並且還使用parseInt在這些行上將操作數強制轉換爲int – mynawaz

+0

更改了數組從var array = [「」,「」,「」]'到'var array = []',因爲它只是創建一個空數組,而'i'在for循環中完成其餘部分。看看這裏:http://jsfiddle.net/zzx5w79a/也許你想包括這個鏈接到你的問題。我無法找到「偶爾..,代碼相乘..」 – caramba

回答

3

您應該將[first[rand]*num[i]]更改爲(first[rand]*num[i])。 []括號僅用一個值(乘法乘積)實例化一個數組,然後將數組'添加'到一個數字,這將強制引擎將數組轉換爲字符串並將字符串與你正在添加的數字。

爲了說明,請考慮下面的代碼。它還實例化一個數組,但使用unary + operator將其轉換爲數字。這將導致數值而不是數組,因此您的代碼將按預期工作。

+[first[rand]*num[i]] 

爲了進一步說明發生了什麼,考慮下面的代碼。它也實例化了一個單元素數組,但是通過將它附加到[0],我們指定了該元素的(數值)值,因此當您使用+運算符時,引擎不會強制將該數組轉換爲字符串。

[first[rand]*num[i]][0] 
+0

非常感謝你的解釋! – Jehangir

+0

不客氣,很高興提供幫助。不要忘記選擇解決問題的適當答案。 – moismailzai

0

您正在使用方括號,您應該使用圓括號。

方括號用於創建數組。例如[2 * 3]創建一個包含一個項目的數組:6.此外,+ operator將執行數字加法或字符串連接,具體取決於操作數。添加數組和數字會導致串聯。因此,例如以下語句:

ans = "6" + "4"; 
// string "64" 

你需要擺脫被錯誤使用方括號:作爲

​​

進行評估。


除此之外,您還使用Math.random()函數不正確。這個語句,例如:

Math.round(Math.random() * 9) + 1 

顯示通過8.正確的方法1和10之間返回一個隨機數。然而,數字比數2 1和10將具有較小的概率產生的隨機數minmax之間是:

Math.floor(Math.random() * (max - min + 1)) + min 

最後,這樣的說法:

rand = Math.round(Math.random() * 1); 

只會返回0和1,但不是2ÿ你也需要解決這個問題。

相關問題