merul: Problem mit for-Schleife und shift()?

Beitrag lesen

Hallo!

Ich möchte Fragebögen dynamisch mittels Javascript erstellen. Fragen und Antworten sind in einem Array genauso wie die verschiedenen Fragenkombinationen für die Fragebögen. Die entsprechende Funktion sind bisher wie folgt aus:

  
Kombination = new Array(16); // Jedes Element des Arrays enthält die vorgeschriebenen Fragenkombis als Arrays.  
Fragen = new Array(99); // Array für die Fragen und Antworten. jedes Element ist wiederum ein Array, wobei dort jeweils das erste Element immer die Frage ist, das zweite immer die richtige Antwort.  
Fragen[1] = new Array("Der wie vielte Bundespräsident ist Joachim Gauck?", "der 11.", "der 9.", "der 10.", "der 12."); // Beispiel für eine solche Frage  
  
function fragen(n) { // n ist die Nr. des Fragebogens und wird bei Aufruf übergeben  
	Kombination[n].shuffle(); // "shuffle()" (s. unten. Bei mir auf dem Rechner ist's vor dieser Funktion.) ist aus dem Inet gesucht, um die Elemente des Arrays, also die Fragen der Fragebögen, zu mischen.  
  
	document.write("<form name=\"Fragebogen\" action=\"\">\n");  
	  
	for (var i = 0; i < Kombination[n].length; i++){  
		var antw = Fragen[Kombination[i]][1]; // die richtige Antwort wird gesichert, bevor die Antworten gemischt werden.  
		var frage = Fragen[Kombination[i]].shift(); // das erste Element, also die Frage, wird entfernt und "frage" übergeben, damit die Antworten gemischt werden können.  
		Fragen[Kombination[i]].shuffle(); // die Antworten werden gemischt.  
		document.write("<p>" + (i+1) + ".&nbsp;" + frage + "<br><br>\n");  
		for (var k = 0; k < 4; k++) { // es gibt immer genau vier Antworten.  
			document.write("<input type=\"radio\" name=\"Frage_" + (i+1) + "\" value=\"");  
			if (Fragen[Kombination[i]][k] == antw)  
			{document.write("1");}  
			else {document.write("0");}; // unterschiedliche values dienen der Auswertung (1 steht für richtige Antwort.)  
			document.write("\">" + Fragen[Kombination[i]][k] + "<br>\n");  
		};  
  
		document.write("</p><br>\n");  
	};  
	  
	document.write("<input type=\"button\" name=\"Auswertung\" value=\"Auwertung\" onclick=\"auswertung();\">\n<\/form>");  
	  
	return true;  
}  
  
Array.prototype.shuffle = function() {  
var s = [];  
while (this.length) s.push(this.splice(Math.random() * this.length, 1)[0]);  
while (s.length) this.push(s.pop());  
return this;  
}  

Mein Problem ist jetzt, dass es bei jedem Aufruf der Funktion Fragen (bisher jeweils frühestens die 6.) gibt, bei denen die vierte, manchmal auch die dritte und die vierte Antwort als "undefined" ausgegeben und anstatt der Frage eine Antwort hingeschrieben werden. Meines Erachtens bedeutet das, dass mir "shift()" irgendwie mehr Elemente "klaut", als ich eigentlich will. Also muss der Fehler wahrscheinlich in der (ersten?) for-Schleife stecken.

Ich finde ihn aber irgendwie nicht. Könntet ihr mir vielleicht helfen? :)

Viele Grüße und vielen Dank schon mal

merul