Griever: Schleife hängt sich auf ... kompletter Code

Beitrag lesen

Re

Ein 80286'er ist ein Intel Prozessor (ein Vorläufer des Pentiums)

Das war ironisch gemeint. Mein CPU hat nicht allzu hohe Leistungen. Dass deiner das in bruchteilen schafft, ist mir klar. Meiner aber nicht. Wenn du das ganze Script mal im IE startest, wirst du es sehen ...

Hier mal aufgeräumter Code:

  
<body>  
<script type="text/javascript">  

~~~~~~javascript
  
<!--  
// Allchemiescript via JavaScript  
var AnzahlChemikalien = 799,alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";alpha = alpha.split("");  
var menge = 50,Chemikalien = new Array();  
// Abfragen, ob als Anzahl 0 oder niedriger eingegeben wurde. Wenn nein, gegebene Anzahl an Kombinationen erstellen.  
  
if(AnzahlChemikalien > 0)  
{  
 // Schleife zur zufallserstellung einer Kombination (später noch korrigiert)  
 for(var i = 0;i<AnzahlChemikalien;i++)  
 {  
  Chemikalien[i] = alpha[Math.round(Math.random()*(alpha.length-1))]+alpha[Math.round(Math.random()*(alpha.length-1))]+alpha[Math.round(Math.random()*(alpha.length-1))]  
 }  
}  
else  
{  
 // Schleife zur erstellung sämtlicher Möglichkeiten.  
 for(var i = 0;i<alpha.length;i++)  
 {  
  for(var j = 0;j<alpha.length;j++)  
  {  
   for(var k = 0;k<alpha.length;k++)  
   {  
    Chemikalien[Chemikalien.length]=alpha[i]+alpha[j]+alpha[k]  
   }  
  }  
 }  
}  
  
// Interne Variablen  
var SaveReg = null,Seconda = 0,Substanzenarray = new Array(),rekursivdurchschnitt = 0  
// Ausgabeobjekt schreiben  
document.write("<span id='Reagenz'></span>")  
  
// 2 Reagenzgläser mischen-Funktion  
function Start_Mix(REGGLASS)  
{  
 if(SaveReg == null)  
 {  
  // Capturen der übergebenen Reagenzgläser in externe (außerhalb von der Funktion stehende) Variablen.  
  SaveReg = REGGLASS;  
  Seconda = REGGLASS;  
  // Durchschnitt berechnen ... (nach änderung sowieso überflüssig)  
  rekursivdurchschnitt = REGGLASS.Aktuell/REGGLASS.Substanzen.length  
  
  // Substanzen auszählen  
  for(var i in Seconda.Substanzen)  
  {  
   var rrt = 0;  
   // Chemikalienindex herausfinden.  
   for(var j = 0;j<Chemikalien.length;j++)  
   {  
    if(Chemikalien[j]==Seconda.Substanzen[i])  
    {  
     // Bei fund variable übergeben und schleife abbrechen.  
     rrt=j;  
     break;  
    }  
   }  
   // Substanznummer speichern  
   Substanzenarray[Substanzenarray.length]=j  
  }  
  // Leeren des Reagenzglases.  
  REGGLASS.Aktuell = 0;  
  REGGLASS.Substanzen = new Array()  
 }  
 else  
 {  
  // Wenn ein Reagenzglas gewählt wurde ...  
  // Übergebenen Wert speichern ...  
  SaveReg = REGGLASS;  
  
  // Substanzen herauslesen und in Chemikalienindex umwandeln  
  for(var i in Seconda.Substanzen)  
  {  
   var rrt = 0;  
   for(var j = 0;j<Chemikalien.length;j++)  
   {  
    if(Chemikalien[j]==Seconda.Substanzen[i])  
    {  
     rrt=j;  
     break;  
    }  
   }  
   // Der Liste hinzufügen.  
   Substanzenarray[Substanzenarray.length]=j  
  };  
  
  // Erneut ...  
  for(var i in SaveReg.Substanzen)  
  {  
   var rrt = 0;  
   for(var j = 0;j<Chemikalien.length;j++)  
   {  
    if(Chemikalien[j]==SaveReg.Substanzen[i])  
    {  
     rrt=j;  
     break;  
    }  
   }  
   Substanzenarray[Substanzenarray.length]=j  
  }  
  // Reagenzglas leeren.  
  REGGLASS.Substanzen = new Array();  
  REGGLASS.Aktuell = 0;  
  
  // Substanzen in Array schreiben und danach in das neue Reagenzglas geben  
  for(var i in Substanzenarray)  
  {  
   // Fragen, ob das Reagenzglas benutzbar ist  
   if(REGGLASS.Kanngenutztwerden == true)  
   {  
    // Substanz in das Reagenzglas geben.  
    REGGLASS.AddSubstanz(Substanzenarray[i],rekursivdurchschnitt)  
   }  
   else  
   {  
    // Abbrechen, falls das Glas nicht verwendbar ist.  
    break;  
   }  
  }  
  
  // Vorheriges Reagenzglas leeren  
  Seconda.Aktuell = 0;  
  Seconda.Substanzen = new Array();  
  // Variablen leeren  
  SaveReg = null;  
  Seconda = null;  
  Substanzenarray = new Array()  
 }  
 // Reagenzglas zurückgeben.  
 return REGGLASS  
}  
  
// Erstellen eines neuen Reagenzglases (PART 2)  
function REAGGLASS(MaximaleFuellhoeheInTics)  
{  
 // Substanzliste (ARRAY) erstellen.  
 this.Substanzen = new Array();  
 // Maximale Füllhöhe festlegen  
 this.Maximum = MaximaleFuellhoeheInTics;  
 // Aktuelle Füllhöhe festlegen  
 this.Aktuell = 0;  
 // Benutzbarkeit setzen.  
 this.Kanngenutztwerden=true;  
 // Funktion zur Substanzhinzufügung erstellen  
 this.AddSubstanz = function(Substanz,Menge)  
 {  
  // Abfragen, ob das Reagenzglas noch benutzbar ist  
  if(this.Kanngenutztwerden == true)  
  {  
   // Abfragen, ob die neue Menge über der Maximalmenge liegt  
   if(this.Aktuell - Number("-"+Menge) > this.Maximum)  
   {  
    // Fehlermeldung  
    alert("Das Reagenzglas ist explodiert!");  
    // Leeren des Reagenzglases  
    this.Aktuell=0;  
    this.Substanzen = new Array();  
    this.Maximum = 0;  
    // Unbenutzbar machen  
    this.Kanngenutztwerden = false  
   }  
   else  
   {  
    // Prüfen, ob Menge über 0 liegt  
    if(Menge >= 1)  
    {  
     // Menge zufügen zu aktueller Füllhöhe  
     this.Aktuell += Number(Menge);  
     // Substanz dem Reagenzglas zufügen  
     this.Substanzen[this.Substanzen.length] = Chemikalien[Substanz];  
    }  
   }  
   // Reagenzgläser neu anzeigen  
   alleAnzeigen()  
  }  
  else  
  {  
   // Fehlermeldung für zerstörtes Reagenzglas  
   alert("Das Reagenzglas ist zerstört und kann nicht verwendet werden!")  
  }  
 }  
}  
  
// Neue Reagenzgläser erstellen (PART 1)  
function AddReagenzglas(AnzahlGlaeser,MaximaleFuellhoeheInTics)  
{  
 // Schleife für mehrere Reagenzgläser  
 for(var i = 1;i<=AnzahlGlaeser;i++)  
 {  
  // Eval-Funktion für ansprechen auf dieses Reagenzglas  
  eval("this.Reagenzglas_"+i+" = new REAGGLASS("+MaximaleFuellhoeheInTics+")")  
 }  
}  
  
// Alle Reagenzgläser zeigen  
function alleAnzeigen()  
{  
 // Ausgabeobjekt leeren.  
 document.getElementById("Reagenz").innerHTML = "";  
 //Schleife für die Ausgabe  
 for(var i in Reagenzglaeser)  
 {  
  // farbe für "ganze" und "zerstörte" Reagenzgläser  
  var farbe = (Reagenzglaeser[i].Kanngenutztwerden == true)?"#009F00":"#BF0000";  
  // Prüfung, ob ein Mischvorgang eingeleitet wurde  
  if(SaveReg == null)  
  {  
   // Anzeigen der Standardoptionen (sind derzeit nur in einer Zeile)  
   document.getElementById("Reagenz").innerHTML += "<div style=\"color:"+farbe+";\">"+i.replace("_"," ")+" ("+Reagenzglaeser[i].Aktuell+" / "+Reagenzglaeser[i].Maximum+" || "+((Reagenzglaeser[i].Substanzen.join(", ")=="")?((Reagenzglaeser[i].Kanngenutztwerden==true)?"Leer":"Kaputt"):Reagenzglaeser[i].Substanzen)+") <a href=\"javascript:Reagenzglaeser."+i+".AddSubstanz(document.getElementById('DSUB').value,menge)\">[Substanz zufügen]</a>|<a href=\"javascript:void(0)\" onClick=\"Reagenzglaeser."+i+" = Start_Mix(Reagenzglaeser."+i+");alleAnzeigen()\">[Mischen ...]</a></div>"  
  }  
  else  
  {  
   // Anzeigen der Zweitoption für das Mischen 2er Reagenzgläser (sind derzeit nur in einer Zeile)  
   document.getElementById("Reagenz").innerHTML += "<div style=\"color:"+farbe+";\">"+i.replace("_"," ")+" ("+Reagenzglaeser[i].Aktuell+" / "+Reagenzglaeser[i].Maximum+" || "+((Reagenzglaeser[i].Substanzen.join(", ")=="")?((Reagenzglaeser[i].Kanngenutztwerden==true)?"Leer":"Kaputt"):Reagenzglaeser[i].Substanzen)+") <a href=\"javascript:void(0)\" onClick=\"Reagenzglaeser."+i+" = Start_Mix(Reagenzglaeser."+i+");alleAnzeigen()\">[... mit diesem.]</a></div>"  
  }  
 }  
}  
  
// Andere Variablen.  
var Mischung = new Array();  
  
// Initiieren der Reagenzgläser in die Variable Reagenzglaeser  
var Reagenzglaeser = new AddReagenzglas(10,500);  
  
// Startobjekt für eine Drop-Down-Liste ID = "DSUB"  
document.write("<select style=\"width:200px;\" size=1 id=\"DSUB\">")  
  
// Sortieren der Chemikalien, die zur Verfügung stehen.  
Chemikalien.sort()  
  
// Variable für das Zählen der Doppelten Chemikalien  
var Doppelte = 0  
  
// Schleife zum entfernen von Doppelten  
for(var i in Chemikalien)  
{  
 // Suchwert setzen  
 var SuchWert = Chemikalien[i]  
 // Chemikalien erneut durchgehen und alle Doppelten entfernen.  
 for(var j in Chemikalien)  
 {  
  // Fragen, ob das aktuelle Objekt nicht das suchobjekt ist.  
  if(j == i)  
  {  
   // Überprüfen, ob die 2 Chemikalien identisch sind  
   if(Chemikalien[i] == Chemikalien[j])  
   {  
    // Entfernen des doppelten Eintrags  
    Chemikalien.splice(j,j)  
    // Zähle erhöhen.  
    Doppelte++  
   }  
  }  
 }  
}  
  
// Schleife für die Listen-Elemente  
for(var i in Chemikalien)  
{  
 // Schreiben einer Option für die DDL (Drop-Down-Liste) ...  
 document.write("<option value="+i+">"+Chemikalien[i]+"</option>")  
}  
// Abschließen der DDL  
document.write("</select>")  
// Startevent festlegen  
document.body.onload = alleAnzeigen  
-->  

~~~~~~html
  
</script>  
</body>  

Wenn du Fehler findest, scheue dich nicht, mich damit zu konfrontieren.

MFG
Griever