Code für TypeScript funktioniert nicht?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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:

  1. Solange ein zufälliges Feld wählen, bis du ein freies erwischt (das wird in der jetzigen Lösung gemacht)
  2. 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.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

d0ber 
Beitragsersteller
 19.09.2022, 15:14

Mein Array heißt

rndSave: any[] = [];
rndInt= 8;

0
d0ber 
Beitragsersteller
 19.09.2022, 15:15
@d0ber

Wird alles in TypeScript geschrieben

0
MrAmazing2  19.09.2022, 15:19
@d0ber

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";
0
d0ber 
Beitragsersteller
 19.09.2022, 15:23
@MrAmazing2

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. 

0
MrAmazing2  19.09.2022, 15:24
@d0ber

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";
0
d0ber 
Beitragsersteller
 19.09.2022, 15:28
@MrAmazing2

Doch ich möchte das der Computer nach meine Eingabe in ein zufälliges Feld die noch frei sit X oder O besetzt

0
MrAmazing2  19.09.2022, 15:30
@d0ber

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/

0
d0ber 
Beitragsersteller
 19.09.2022, 15:31
@MrAmazing2
do {
  this.rndInt = Math.floor(Math.random() * this.rndSave.length);
} while (this.rndSave[rndInt]);

meinst du denn hier  
0
d0ber 
Beitragsersteller
 19.09.2022, 15:38
@d0ber

Der Computer setzt automatisch kein X ein (

0
MrAmazing2  19.09.2022, 16:04
@d0ber

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 = ["","","","","","","","",""];
1

Dann solltest du die Fehlermeldungen lesen und dementsprechend handeln.

Der Code-Schnipsel ist so unverständlich und unklar was du wirklich möchtest


d0ber 
Beitragsersteller
 19.09.2022, 11:51

Es ist schwer zu erklären. Ich muss Duplikate aus dem Array entfernen damit der Computer ein X auf das unbesetzte Feld setzen kann 

0
NackterGerd  19.09.2022, 21:47
@d0ber

Dein Code ist schwer zu verstehen. Aber wie ich sehe hast du schon die Lösung bekommen

1