2017-05-19 1 views
2

So habe ich ein bisschen Code, dass, sobald es eine Frage beendet es ist sowieso da, sobald Sie eine Frage auswählen und die Frage zu beenden mach es richtig, es geht weiter zur nächsten Frage im Array, aber wenn du es falsch machst, hört es auf.Ich möchte es auf das nächste Element im Array in einem Javascript-Quiz gehen

Ich habe auch einen kleinen Fehler, dass, wenn Sie in einer Frage-Nummer eingeben und Spam des Enter-Taste auf 0 auf dem Array

Wenn Sie Hilfe bitte tun können, um die Frage geht, und Dank im Voraus. Ich bin 11 und habe vor ungefähr einem Jahr angefangen zu programmieren.

<!DOCTYPE html> 
    <html> 
    <head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<title>Are you smarter than a 5th Grader?!!</title> 
<link rel="stylesheet" href="style.css"> 
    </head> 
    <body onload="starter()" bgcolor="lightblue"> 
    <h1><marquee><font color="red">Make Trivia Great Again!</font>  
     </marquee></h1> 
    <h2><em><center>Are You Smater Than a 5th Grader?</center></em></h2> 
     <button onclick="sc()">Start</button><br> 
     <p id="demo"> </p> 
     <div id="result"></div> 
     <button onclick="reset()">Reset Score</button> 
     <script> 
     function starter(){ 
      setTimeout("clickCounter()",100) 
      setTimeout("minusCounter()",101)} 
     function reset(){ 
      setTimeout("clickCounter()",100) 
      localStorage.clickcount=-1 

     } 
    function clickCounter() { 
    if(typeof(Storage) !== "undefined") { 

     if (localStorage.clickcount) { 
     localStorage.clickcount = Number(localStorage.clickcount)+1; 
     } else { 
     localStorage.clickcount = 0; 
     } 
     document.getElementById("result").innerHTML = "Score:"+          
      localStorage.clickcount 
      } else { 
        } } 
     function minusCounter(){ 

     if(typeof(Storage) !== "undefined") { 

      if (localStorage.clickcount) { 
      localStorage.clickcount = Number(localStorage.clickcount)-1; 
      } else { 
      localStorage.clickcount = 0; 
      } 
      document.getElementById("result").innerHTML = "Score:"+        
      localStorage.clickcount 
     } else { 
     } 
     } 

     if (!("scramble" in Array.prototype)) { 
      Object.defineProperty(Array.prototype, "scramble", { 
      enumerable: false, 
      value: function() { 
     var o, i, ln = this.length; 
     while (ln--) { 
      i = Math.random() * (ln + 1) | 0; 
      o = this[ln]; 
      this[ln] = this[i]; 
      this[i] = o; 
     } 
     return this; 
      } 
      }); 
     } 
     var quiz = [{ 
      "question": ["Bug in the editor"], 
      "choices": ["Please Ignore,Spam Enter or enter Cancel or Other"], 
      "correct": ["Other"] 
     }, { 
        "question": "Who is the founder of Microsoft?", 
      "choices": ["Bill Gates", "Steve Jobs", "Steve Wozniak" , "Martin   
       Shaba"], 
      "correct": "Bill Gates" 
     }, { 
      "question": "What was your first dream?", 
      "choices": ["8 bits", "64 bits", "1024 bits"], 
      "correct": "8 bits" 
     }, { 
      "question": "The C programming language was developed by?", 
      "choices": ["Brendan Eich", "Dennis Ritchie", "Guido van   
      Rossum"], 
      "correct": "Dennis Ritchie" 
     }, { 
      "question": "What does CC mean in emails?", 
      "choices": ["Carbon Copy", "Creative Commons", "other"], 
      "correct": "Carbon Copy" 
     }, { 
      "question": "What is the full for of IP", 
      "choices": ["Internet provider", "Intenet Port",    
      "Other","Internet        Protocol"], 
        "correct": "Carbon Copy" 
     }] 
     function stop(){ 
      alert("stopped") 
     } 
    function sc(){ 
     quiz.forEach(q => q.choices.scramble()); 
     var x = prompt("Select Start question number #:"); 
       if (x>=6){ 
    alert("please pick a valid question") 
       sc() 
     } 
    else if (x<=5&&x>0){ 

    } 

    else if(x=0){ 
     alert("please pick a valid question") 
       sc() 
    } 

     else{alert("Please pick a valid question"),sc()} 

     var ans = "" 
     function myFunction(item, index) { 
      ans += "\n[" + (index+1) + "]: " + item ; 
     } 
     quiz[x].choices.forEach(myFunction); 

     var y = prompt(quiz[x].question+"\nYour anwser is:"+ans); 

     if (y == quiz[x].correct){ 
      alert("Correct!") 
      clickCounter() 

     } 
      else if(y=="Cancel"){alert("canceled")} 
    else{ 
      alert("Wrong! Please Try Again."); 
      repeat() 
     } 
    function repeat(){ 
     quiz.forEach(q => q.choices.scramble()); 
     var ans = "" 
     function myFunction(item, index) { 
     ans += "\n[" + (index+1) + "]: " + item ; 
     } 
     quiz[x].choices.forEach(myFunction); 

     var y = prompt(quiz[x].question+"\nYour anwser is:"+ans); 

     if (y == quiz[x].correct){ 
     alert("Correct!,Good Job") 
     clickCounter() 


     } 
     else if(y=="Cancel"){alert("canceled")} 
     else{ 
     alert("Sorry! \nThe right answer is "+quiz[x].correct); 

     } 
    } 

    } 

     </script> 


    </body> 
    </html> 

Antwort

1

Zunächst einmal willkommen in der Welt der Programmierung, junge Programmierer :)

Bevor Sie eine Lösung auf Ihre Frage geben, würde ich Ihnen folgenden Rat geben:

Räumen Sie Ihren Code. Sie denken vielleicht, Sie brauchen viel Zeit und Mühe, um dies zu tun, aber die Wahrheit ist - Sie sparen viel Zeit beim Debuggen.

Professionelle Programmierer haben den größten Teil ihrer Zeit mit Planung und Debugging verbracht, aber nicht selbst programmiert. Es ist also wichtig, das Debugging einfach zu machen. Der erste Schritt besteht darin, sauberen Code zu schreiben.

Ihre Frage zeigt dies gut: Sie wissen nicht, was passiert und Sie können es nicht sehen. (Es ist auch ein Schmerz für jemand anderen zu lesen und Hilfe)

Es ist eigentlich zwei einfache Probleme:

  1. Sie haben eine unendliche-Looping-Funktionsaufruf auf Ihrer Funktion
    Im else-if-Falle var x, müssen Sie eine Rückkehr hinzufügen, um die Funktion zu verlassen.
  2. Sie lösen fast immer diese unendliche Schleife durch x = 0 statt x == 0
    Vertippen (vorausgesetzt, Sie wissen, dass x = 0 nicht das gleiche wie x == 0 ist)

Also folgendes ist der Code beteiligt: ​​

 if (x >= 6) { 
      alert("please pick a valid question") 
      sc() 
     } else if (x <= 5 && x > 0) { 

     } else if (x == 0) { // x = 0 is assignment, not comparison 
      alert("please pick a valid question") 
      sc() 
      return; // You have to 'return' here 
        // otherwise the code following the else would continue to execute after this inner-sc() returns 
     } else { 
      alert("Please pick a valid question"), sc() 
     } 

Außerdem gab es Zeilenumbrüche in den Strings Ihres Quiz-Arrays. Ich bin mir nicht sicher, ob es nur Ihre Kopie & Einfügen in Stack Overflow ist, die diese Zeilenumbrüche hinzugefügt, aber wenn nicht, sollten Strings keine Zeilenumbrüche enthalten.Wenn Sie Zeilenumbrüche hinzufügen müssen, verwenden Sie das Newline-Zeichen \n (Back-Schrägstrich n)

0

Sorry, aber ich habe Ihre Frage nicht klar verstanden. Können Sie mir mehr darüber erzählen?

Wenn Sie meinen, dass, wenn Sie versuchen, die Antwortoption in der Zahl zu tippen, und es nie wahr zurückgibt, dann verglichen Sie die number und die "correct" string.

Sie sollten versuchen, den gleichen Datentyp zu vergleichen, um das gewünschte Ergebnis zu erhalten.

+0

Es ist ein Kommentar nicht zu beantworten – geminiousgoel

+0

Er hat wahrscheinlich nicht genug rep zu kommentieren. – kazenorin

+0

Ja, ich habe nicht genug Ruf zu kommentieren :( –

Verwandte Themen