2015-10-17 3 views
5

मुझे एक ऐसी समस्या है जो मैं हल नहीं कर पा रहा हूं। कृपया नीचे दिए गए कोड पर एक नज़र डालें:जावास्क्रिप्ट कोड ठीक चलाता है ... लगभग हर समय

<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] पर + [पहली [रैंड] * संख्या [i]] + दूसरा [रैंड] 'में ब्रांड्स में बाहरी सबसे अधिक वर्ग ब्रैकेट को बदलने का प्रयास करें और इन लाइनों पर parseInt का उपयोग करके ऑपरेटरों को int में डालें – mynawaz

+0

सरणी बदल दी 'var array = [" "," "," "]' 'var array = [] 'से' क्योंकि यह सिर्फ खाली सरणी बनाता है और बाकी के लिए लूप में 'i' करता है। यहां एक नज़र डालें: 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 या तो ऑपरेटरों के आधार पर संख्यात्मक जोड़ या स्ट्रिंग कॉन्सटेनेशन करेगा। एक सरणी जोड़ना और concatenation में एक संख्या परिणाम। उदाहरण के लिए इस कथन:

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

आप वर्ग कोष्ठक कि गलत तरीके से इस्तेमाल कर रहे हैं से छुटकारा पाने की जरूरत है:

ans = [2 * 3] + 4; 

के रूप में मूल्यांकन किया जाता है।


उसके अलावा, आप भी गलत तरीके से Math.random() समारोह का उपयोग कर रहे हैं। उदाहरण के लिए यह बयान:

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

एक यादृच्छिक संख्या उत्पन्न करने के लिए 8. सही विधि के माध्यम से, 1 और 10 के बीच एक यादृच्छिक संख्या वापस जाने के लिए हालांकि संख्या 1 से 10 नंबर 2 की तुलना में कम संभावना होगा प्रकट होता है min और max के बीच है:

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

अन्त में, इस बयान:

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

केवल वापसी करेंगे 0 और 1 नहीं बल्कि 2. Y कहां भी इसे ठीक करने की जरूरत है।

संबंधित मुद्दे