Code für TypeScript funktioniert nicht?
Ich baue ein Tic Tac Toe Spiel aber ganz einfache mit TypeScript und habe eine folgende Problem. Folgende Cod:
rndInt= 8;
rndSave = null;
rndtest : number=0 ;
Beispiel Cod:
let a=[]
let max = 8
let z = Math.floor(Math.random() * max)
while (a.find(x => x == z) != undefined) {
z = Math.floor(Math.random() * (max+1))
}
console.log(z)
Ich habe versucht, den Code für meine Bedürfnisse umzuschreiben, aber es funktioniert nicht und gibt einen Fehler.
this.rndSave = Math.floor(Math.random() * this.rndInt)
while (undefined != this.rndtest.find(x => x == this.rndSave)) {
this.rndSave = Math.floor(Math.random() * (this.rndInt+1))
Ich möchte, dass die Duplikate gelöscht werden, wenn die Taste gedrückt wird
2 Antworten
Anstatt if (undefined != arr.find(...)) kannst du einfach if (arr.some(...)) verwenden. Ist deutlich lesbarer und zudem kürzer.
Der Code macht übrigens etwas ganz anderes als das, was du sagst: Dein Beispiel-Code probiert solange eine zufällige Stelle aus, bis er eine freie gefunden hat.
Der Beispielcode ist noch korrekt, aber der untere, den du geschrieben hast, macht keinen Sinn:
Du machst rndtest.find(). Aber .find() ist eine Funktion, um ein Array zu durchsuchen. Das kannst du nicht auf eine einzelne Zahl anwenden, wie willst du die denn durchsuchen, das macht keinen Sinn.
Wie heißt denn dein Array?
Dann sag ich dir, welchen Code du brauchst.
Und du solltest wissen:
Um ein zufälliges freies Feld zu wählen gibt es zwei Möglichkeiten:
- Solange ein zufälliges Feld wählen, bis du ein freies erwischt (das wird in der jetzigen Lösung gemacht)
- Das Array filtern, sodass du ein neues Array hast, das nur noch die freien Felder enthält - Und davon dann ein zufälliges wählen.
Dein Code macht ersteres, aber nennen tust du letzteres. Aber ja, wie gesagt, sag mir wie dein Array heißt, dann kann ich dir gerne den Code für beide Möglichkeiten schreiben.
Ah, also rndSave ist dein Array das die neun Felder enthält und rndInt ist die Stelle die du zufällig ausprobierst, richtig?
Okay, dann muss es so:
do {
this.rndInt = Math.floor(Math.random() * this.rndSave.length);
} while (this.rndSave[rndInt]);
Nach dieser Schleife hast du in rndInt einen Index stehen, an dem rndSave noch nicht besetzt ist. Dann kannst du z.B. machen
this.rndSave[rndInt] = "X";
Ja, das ist richtig, ich muss die Taste verwenden, um die Nummer des gedrückten Indexes zu übergeben, damit der Computer weiß, dass der Index bereits belegt ist und er dort nichts mehr ablegen kann.
Achso, du willst nicht ein zufälliges Feld mit "X" oder "O" besetzen (das macht nämlich der Code in der Frage), sondern einfach nur die Eìngabe des Nutzers in das Array speichern?
rndSave: any[] = ["","","","","","","","",""];
und dann weiter unten
if (rndSave[index] == "") rndSave[index] = "X";
Doch ich möchte das der Computer nach meine Eingabe in ein zufälliges Feld die noch frei sit X oder O besetzt
Ok jo, dann kannst du einfach den Code verwenden den ich geschrieben hab, das sollte klappen. Kann sein dass ich ein paar "this." vergessen hab, musste kucken.
In der Demo funktionierts: https://jsfiddle.net/r9awc4o2/
do {
this.rndInt = Math.floor(Math.random() * this.rndSave.length);
} while (this.rndSave[rndInt]);
meinst du denn hier
Jo den Code mein ich. Dadurch wird ein zufälliges leeres Feld in rndSave mit "X" ersetzt.
Du musst dein rndSave Array natürlich vorher mit 9 leeren Feldern befüllen:
this.rndSave = ["","","","","","","","",""];
Dann solltest du die Fehlermeldungen lesen und dementsprechend handeln.
Der Code-Schnipsel ist so unverständlich und unklar was du wirklich möchtest
Es ist schwer zu erklären. Ich muss Duplikate aus dem Array entfernen damit der Computer ein X auf das unbesetzte Feld setzen kann
Dein Code ist schwer zu verstehen. Aber wie ich sehe hast du schon die Lösung bekommen
Mein Array heißt