Hi.
Ich habe mir eine kleine Spielerei (NUR für IE) erlaubt. Dadurch lernt man am besten über irgendwas. Aus Versuch und Fehlschlag.
Nun ja. Aber ein Problem kriege ich einfach nicht gelöst.
Ich habe hier folgende Variablen:
var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";alpha = alpha.split("");
var Chemikalien = new Array();
Ist natürlich billig gemacht und der eine oder andere hat noch ein paar verbesserungsvorschläge. Aber mal drüberweggesehen ...
Ich habe mir eine Schleife (zumindestens 3 verschachtelte For-Schleifen) erstellt, welche mir danach alle Kombinationen einer aus 3 Buchstaben bestehenden Zeichenfolge in die Variable Chemikalien schreibt. So steht es bei mir drin:
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]
}
}
}
Doch egal wie ich es versuche anzustellen. Diese Schleife bleibt immer stehen.
Ich habe herausgefunden, dass es genau 175756 Kombinationen gibt. Aber ich frage mich, warum der IE etwa 600000 Codes innerhalbt von 2 Minuten erstellt, jedoch bei diesen 17k nach 15 minuten abbricht.
Kann mir vielleicht jemand einen Rat geben?
Hier mal das komplette Script (Sehr umfangreich! Es sind einige kleine Fehler drin, aber das ist erstmal unwichtig):
<body>
<script language="JavaScript">
~~~~~~javascript
<!--
// Allchemiescript via JavaScript
var AnzahlChemikalien = 0
var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";alpha = alpha.split("");
var menge = 50
var Chemikalien = new Array();
if(AnzahlChemikalien > 0)
{
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
{
// Um diese Schleife gehts!
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]
}
}
}
}
var SaveReg = null,Seconda = 0
document.write("<span id='Reagenz'></span>")
var Substanzenarray = new Array()
var rekursivdurchschnitt = 0
function Start_Mix(REGGLASS) {
if(SaveReg == null){
SaveReg = REGGLASS;
Seconda = REGGLASS;
rekursivdurchschnitt = REGGLASS.Aktuell/REGGLASS.Substanzen.length
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;
}
}
Substanzenarray[Substanzenarray.length]=j
}
REGGLASS.Aktuell = 0;
REGGLASS.Substanzen = new Array()
}
else
{
SaveReg = REGGLASS;
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;}}Substanzenarray[Substanzenarray.length]=j};
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
}
REGGLASS.Substanzen = new Array();
REGGLASS.Aktuell = 0;
for(var i in Substanzenarray){
if(REGGLASS.Kanngenutztwerden == true){
REGGLASS.AddSubstanz(Substanzenarray[i],rekursivdurchschnitt)}else{break;}}Seconda.Aktuell = 0;Seconda.Substanzen = new Array();SaveReg = null;Seconda = null;Substanzenarray = new Array()}return REGGLASS}
function REAGGLASS(MaximaleFuellhoeheInTics) {this.Substanzen = new Array();this.Maximum = MaximaleFuellhoeheInTics;this.Aktuell = 0;this.Kanngenutztwerden=true;this.AddSubstanz = function(Substanz,Menge) {if(this.Kanngenutztwerden == true){if(this.Aktuell - Number("-"+Menge) > this.Maximum){alert("Das Reagenzglas ist explodiert!");this.Aktuell=0;this.Substanzen = new Array();this.Maximum = 0;this.Kanngenutztwerden = false}else{ if(Menge >= 1) { this.Aktuell += Number(Menge); this.Substanzen[this.Substanzen.length] = Chemikalien[Substanz]; }}alleAnzeigen()}else{alert("Das Reagenzglas ist zerstört und kann nicht verwendet werden!")}}}
function AddReagenzglas(AnzahlGlaeser,MaximaleFuellhoeheInTics){for(var i = 1;i<=AnzahlGlaeser;i++){eval("this.Reagenzglas_"+i+" = new REAGGLASS("+MaximaleFuellhoeheInTics+")")}}
function alleAnzeigen() {document.getElementById("Reagenz").innerHTML = "";for(var i in Reagenzglaeser){var farbe = (Reagenzglaeser[i].Kanngenutztwerden == true)?"#009F00":"#BF0000";
if(SaveReg == null){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{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>"}}}
var Mischung = new Array();
var Reagenzglaeser = new AddReagenzglas(10,500);
document.write("<select style=\"width:200px;\" size=1 id=\"DSUB\">")
Chemikalien.sort()
var Doppelte = 0
for(var i in Chemikalien)
{
var SuchWert = Chemikalien[i]
for(var j in Chemikalien)
{
if(Chemikalien[i] == Chemikalien[j])
{
Chemikalien.splice(j,j)
Doppelte++
}
}
}
function setMenge(x)
{
menge=x
}
for(var i in Chemikalien){document.write("<option value="+i+">"+Chemikalien[i]+"</option>")}
document.write("</select>")
document.body.onload = alleAnzeigen
-->
~~~~~~html
</script></body>