Hallo Leute!
Ich habe ein Programm, in dem man in ein Editfeld ein Wort eingeben kann. Es soll zufällig wiederzusammengesetzt werden. Ich hab das ganze so gemacht:
Delphi-Quellcode:
for I := 1 to length(Eingabe) do begin
AusgabeDurcheinanderArray[I] := copy(Eingabe,I,I);
end;
for I := 1 to length(Eingabe) do begin
Zufall := trunc(random(length(Eingabe)))+1;
if AusgabeDurcheinanderArray[Zufall] = '' then begin
Zufall := trunc(random(length(Eingabe)))+1;
AusgabeDurcheinanderBuchstabe := AusgabeDurcheinanderArray[Zufall];
AusgabeDurcheinanderFertig := AusgabeDurcheinanderFertig+AusgabeDurcheinanderBuchstabe;
AusgabeDurcheinanderArray[Zufall] := '';
end else begin
AusgabeDurcheinanderBuchstabe := AusgabeDurcheinanderArray[Zufall];
AusgabeDurcheinanderFertig := AusgabeDurcheinanderFertig+AusgabeDurcheinanderBuchstabe;
AusgabeDurcheinanderArray[Zufall] := '';
end;
end;
Zuerst lege ich jeden Buchstaben in ein Array. Dann bilde ich eine Zufallszahl, schau ob das Array leer ist (das Array des Buchstaben, denn ich bereits entnommen habe wird geleert) wenn es leer ist soll eine neue Zufallszahl gebildet werden und sonst soll einfach der Buchstabe des Arrays zu den anderen die bereits entnommen worden sind hinzufügen.
Mein Problem: es werden manche buchstaben doppelt und manche gar nicht herausgenommen, dann wird aus einem wort wie hallo gleich mal llloh
Was mach ich falsch?
Mit freundlichen Grüßen
ProgrammiererMike
Erstens einmal, ist diese Zeile hier unfug:
Delphi-Quellcode:
for I := 1 to length(Eingabe) do
begin
AusgabeDurcheinanderArray[I] := copy(Eingabe,I,I);
end;
// Besser
Move( Eingabe[1], AusgabeDurcheinanderArray[1], Length( Eingabe ) ); {ich nehme an, Ausgabe...Arr = [1..<x>] of Char}
Weiters, zum eigentlichen Problem:
Delphi-Quellcode:
Zufall := trunc(random(length(Eingabe)))+1; // WAS WENN Array[ZUFALL] WIEDER = ''?
AusgabeDurcheinanderBuchstabe := AusgabeDurcheinanderArray[Zufall];
Mein Ansatz (hab deinen in geistiger Abwesendheit überflogen):
- erstelle ein Resultstring mit gleicher Länge (wie Eingabe)
- erstelle ein Array[0..Länge-1] mit den Werten {1,2,...,Länge) // zufArr
- initialisiere eine Index Variable mit 0 (zb. i)
- solange das Array Elemente besitzt, mache folgendes...
-- inkrementiere die Index Variable
-- wähle eine Zufallszahl im Bereich von 0..High(Array) und speichere in Variable (x) // Random(Length(zufArr))
-- weise dem Resultstring an der Stelle i den Wert Eingabe[zufArr[x]] zu
-- lösche den Wert aus dem Array