• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Array-Schleife und Wahrscheinlichkeit erhöhen

Hanna11

Mitglied
Hallo, ich programmiere gerade einen Vokabeltrainer und habe die Vokabeln in Arrays gespeichert. Mein Programm läuft auch und man kann die Vokabeln auch abfragen. Ich will jetzt aber nicht, dass aber gezählt wird, wie viele richtige Antworten man gegeben hat und dann die Schleife endet. Ich habe das versucht mit do/while. Jedoch habe ich es so eingestellt, dass wenn man die Vokabeln überprüft sich die Seite neuladet, um nicht immer von Hand die Seite zu refreshen. Das Problem ist jetzt, dass halt dann die richtigen Antworten immer wieder von neu gezählten werden. Hat jemand einen Tipp, wie das möglich wäre. Mein zweites Problem ist, dass ich die Wahrscheinlichkeit erhöhen möchte, dass eine Vokabel aufgerufen wird, wenn sie falsch ist. Dafür habe ich eine Funktion erstellt, die sagt, dass die jeweilige Vokabel ins Array hinzugefügt werden soll. Naja, irgendwie hat das auch nicht funktioniert.
Und eine weitere Frage: Gibt es eine Möglichkeit, dass auf jeden Fall versichert ist, dass alle Vokabeln abgefragt werden. Das wäre mir dann zum Beispiel wichtig, wenn ich mit mehreren Vokabeln arbeite. Danke im Voraus!
Hier ist mein Quellcode:
Code:
<!DOCTYPE html>
<html lang="en">
<head>
  <link rel="stylesheet" href="designvoc.css">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vokabeltrainer</title>
</head>
<body>
<p id ="demo"></p>
<div id="website">

  <div class="center">
    <input type="text" id="vokabel">
    <input type="text" placeholder="Lösung" id="loesung" autofocus>
    <button id="pruefen" onclick=Pruefen();javascript:location.reload(); >Überprüfen</button>
    
    </div>

        <script>

var index
var vokablen = ["hallo", "car", "haus", "geld", "ja", "nein", "Vater", "Mutter", "Kind", "danke", "bitte", "Baum", "rot"];
var uebersetzung = ["hello", "auto", "house", "money","yes", "no", "father", "mother", "child", "thank you", "please", "tree", "red"];
richtigeAntwort= 0;
var wiederholung;


var input = document.getElementById("loesung");
input.addEventListener("keyup", function(event) {
  if (event.keyCode === 13) {
   event.preventDefault();
   document.getElementById("pruefen").click();
  }
});


  index = Math.floor(Math.random() * vokablen.length)
    document.getElementById("vokabel").value = vokablen[index]


function Pruefen(){
    if(document.getElementById("loesung").value == uebersetzung[index])
      alert("richtig!"), richtigeAntwort++;
  else
    alert("falsch :( Die Lösung ist: " + uebersetzung[index]),
    wiederholung=prompt("Gebe " + uebersetzung[index] + " nochmal ein, um die Vokabel zu verinnerlichen");
   alert("Deine richtigen Antworten sind: " + richtigeAntwort++);
}

// Diese Funktion habe ich schon in die if-Abfrage eingebaut, aber es hat dann nicht funktioniert
function myFunction() {
  vokablen.push(vokablen[index]);
 
}
document.getElementById("demo").innerHTML = vokablen;
        </script>

</div>

</body>
</html>
 
Werbung:
Danke für deine Antwort. Jedoch funktioniert das nicht. Denn entweder das Feld für die Vokabel bleibt leer oder die Seite wird trotzdem neu geladen und die richtigen Antworten bleiben immer bei 1.
 
Also es hat jetzt doch funktioniert, dass es sich neulädt und eine neue Vokabel erscheint. Aber die Übersetzung, die ich geschrieben habe, bleibt stehen und man muss das dann erst weglöschen (was für den User schon etwas umständlich ist). Außerdem springt dann bei der zweiten richtigen Antwort der Zähler auf 3 richtige Antworten und bei der dritten richtigen Antwort auf 5.
 
Werbung:
Okay, also ich habe den Fehler gefunden, sodass sich jetzt die Zahl nicht um 2 wächst, sondern nur noch, um eins. (habe irgendwo anstatt richtigeAntwort, richtigeAntwort++ geschrieben :) Und ich habe es geschafft, das bei einer falschen Antwort, diese Vokabel im array hinzugefügt wird, sodass diese öfters drankommen wird. Das Problem, dass man seine Übersetzung erst wegmachen muss, ist immer noch da. Außerdem funktioniert meine Schleife nicht. Der alert nach der Schleife wird nicht ausgeführt. Hier mein Quellcode:
Code:
var index
var vokablen = ["hallo", "car", "haus", "geld", "ja", "nein", "Vater", "Mutter", "Kind", "danke", "bitte", "Baum", "rot"];
var uebersetzung = ["hello", "auto", "house", "money","yes", "no", "father", "mother", "child", "thank you", "please", "tree", "red"];
richtigeAntwort= 0;
var wiederholung;


var input = document.getElementById("loesung");
input.addEventListener("keyup", function(event) {
  if (event.keyCode === 13) {
   event.preventDefault();
   document.getElementById("pruefen").click();
  }
});


  index = Math.floor(Math.random() * vokablen.length)
    document.getElementById("vokabel").value = vokablen[index]

do {
function Pruefen(){
    if(document.getElementById("loesung").value == uebersetzung[index])
  richtigeAntwort++,     alert("richtig!"),  index = Math.floor(Math.random() * vokablen.length),
    document.getElementById("vokabel").value = vokablen[index];
  else
    alert("falsch :( Die Lösung ist: " + uebersetzung[index]),
    wiederholung=prompt("Gebe " + uebersetzung[index] + " nochmal ein, um die Vokabel zu verinnerlichen"), vokablen.push(vokablen[index]);
   alert("Deine richtigen Antworten sind: " + richtigeAntwort);
   alert(vokablen);
}
}while (richtigeAntwort== 3)

if(richtigeAntwort == 3){
  alert("Super! Du hast 3 Vokabeln richtig geschrieben! Mach eine Pause");
}


document.getElementById("demo").innerHTML = vokablen;
        </script>
 
Also es hat super funktioniert. Nur muss ich jetzt den Knopf "Überprüfen" drücken, damit das ganze funktioniert. Davor konnte ich es mit enter bestätigen. Dafür hatte ich diesen Code:
Code:
var input = document.getElementById("loesung");
input.addEventListener("keyup", function(event) {
  if (event.keyCode === 13) {
   event.preventDefault();
   document.getElementById("pruefen").click();


Das funktioniert aber jetzt nicht mehr. Des weiteren muss man jetzt erst wieder auf das Feld klicken, um seine Übersetzung zu schreiben. Davor war der Cursor gleich im Feld. Das habe ich so gemacht :
Code:
  <input type="text" placeholder="Lösung" id="loesung" autofocus>

Also mit autofocus. Aber irgendwie verliert es jetzt die Wirkung.
Nachdem die Schleife zu Ende ist möchte ich das angezeigt wird, welche Vokabeln man richtig beantwortet hat. Dafür habe ich einen leeren Array erstellt und die ich füg dann immer die Vokabel zu diesem array hinzu, wenn man es richtig geschrieben hat. Des Problem ist, dass die Vokabeln, die man mehrmals richtig hatte, dan auch mehrmals in dem Array stehen. Kann man das irgendwie verhindern? Oder hast du eine andere Idee, wie man es so machen kann, dass alle Vokabeln abgefragt werden können aus dem Vokabel-Array, weil sonst könnte es ja sein, dass der User manche Vokabeln nie lernt.
 
Werbung:
Code:
       var input = document.getElementById("loesung");
       input.addEventListener("keyup", function(event) {
       if (event.keyCode === 13) {
       event.preventDefault();
       document.getElementById("pruefen").click();
  }
});

Das habe ich jetzt hinzugefügt! Ist jetzt nicht, was du vorgeschlagen hast, aber ich hab deins ausprobiert und irgendwie hat es nicht funktioniert (vielleicht war ich auch einfach zu dumm :)). Aber egal so funktioniert es.
 
Das muss auch mal sein:
@Hanna11 ich muss dir ein paar Respekt Punkte geben.

Wenn ich noch an deinen ersten Beitrag denke und jetzt sehe wie du die Vorschläge von @Sempervivum umsetzt und auch zu verstehen scheinst, ist schon echt Toll.
Selten ein Neuling gesehen der soviel selber macht und auch so schnell lernt.
Mach weiter so
 
Werbung:
@Sempervivum Das mit dem include hat auch funktioniert. Jedoch bin ich auf ein Fehler gestoßen, denn ich nicht erklären kann. Wenn man ein Wort falsch geschrieben hat, kommt der alert("falsch") und man muss das Wort nochmal eingeben. Aber wenn dann dieses Wort in der Abfrage nochmal dran kommt. Dann egal, ob man es richtig oder falsch schreibt, wird es als falsch gewertet und dann steht bei meinem alert: Die Lösung ist: undefined (dort müsstet dann eigentlich die richtige Lösung stehen) Hier ist mein Code:
Code:
<!DOCTYPE html>
<html lang="en">
<head>
  <link rel="stylesheet" href="designvoc.css">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vokabeltrainer</title>
</head>
<body>

<div id="übersicht"> Richtig beantwortete Vokabeln:<p id ="demo"></p> Restliche Vokabeln: <span id="rechnen"></span></div>
<div id="website">


  <div class="center">
  <span id="abstand"> <input  type="text" id="vokabel"></span>
    <input type="text" placeholder="Lösung" id="loesung" autofocus>
   <div id="submit"> <button id="pruefen" onclick=Pruefen();>Überprüfen</button> </div>
    
    </div>

        <script>
var richtigeVokabeln, text;
var index;
var rechnung;
var erg;
        var vokablen = ["hallo", "car", "haus", "geld", "ja", "nein", "Vater", "Mutter", "Kind", "danke", "bitte", "Baum", "rot"];
        var vokablen2 = ["hallo", "car", "haus", "geld", "ja", "nein", "Vater", "Mutter", "Kind", "danke", "bitte", "Baum", "rot"];
        var uebersetzung = ["hello", "auto", "house", "money", "yes", "no", "father", "mother", "child", "thank you", "please", "tree", "red"];
        richtigeVokabeln = [ ];
        richtigeAntwort = 0;
        var wiederholung;

       var input = document.getElementById("loesung");
       input.addEventListener("keyup", function(event) {
       if (event.keyCode === 13) {
       event.preventDefault();
       document.getElementById("pruefen").click();
  }
});
        var input = document.getElementById("loesung");
        document.getElementById('pruefen').addEventListener("click", pruefen);
        
        function pruefen() {
            
            if (document.getElementById("loesung").value == uebersetzung[index]) {
                
                richtigeAntwort++;
                
                alert("richtig! Deine richtigen Antworten sind: " + richtigeAntwort);
                erg=richtigeVokabeln.includes(uebersetzung[index]);
                
                if(erg == false){
                richtigeVokabeln.push(uebersetzung[index]);}
              
                if (richtigeAntwort == 10) {
                    alert("Super! Du hast 10 Vokabeln richtig geschrieben! Mach eine Pause");
                    
                    text = "<ul>";
                    richtigeVokabeln.forEach(myFunction);
                    text += "</ul>";
                    document.getElementById("demo").innerHTML = text;
                    function myFunction(value) {
                    text += "<li>" + value + "</li>"; }

                    rechnung= vokablen2.length - richtigeVokabeln.length;
                    document.getElementById("rechnen").innerHTML = rechnung;
            

                } else {
                    
                    neueVokabel();
                }
            } else {
            
                alert("falsch :( Die Lösung ist: " + uebersetzung[index]);
                wiederholung = prompt("Gebe " + uebersetzung[index] + " nochmal ein, um die Vokabel zu verinnerlichen");
                vokablen.push(vokablen[index]);
              
                neueVokabel();
                alert(vokablen);
            }
        }
      
        function neueVokabel() {
            index = Math.floor(Math.random() * vokablen.length);
            document.getElementById("vokabel").value = vokablen[index];
            document.getElementById("loesung").focus();
          
            input.value = '';
        }
      
        neueVokabel();
        </script>
        <body>
        </html>

Ich finde einfach nicht meinen Fehler.
 
Werbung:
Es hat funktioniert. Es gibt keinen Fehler. Ich habe noch andere Funktionen hinzugefügt und mein Programm funktioniert einwandfrei. Aber das nur mit eurer Hilfe, vor allem die Hilfe von dir, @Sempervivum. Danke für deine Erklärungen und Hilfe. Bis jetzt habe ich keine Fragen mehr. Aber falls was ist, werde ich mich bestimmt melden :)
Nochmal vielen Dank
 
Zurück
Oben