N'Abend!
So wie es aussieht, liegt das daran, dass Du die Strings in "Namen" einliest:
Delphi-Quellcode:
procedure TForm1.btEinlesenClick(Sender: TObject);
begin
inc(n); namen[n]:=edEingabe.text;
edEingabe.Text:= ''
end;
aber später die leere (?) Listbox sortieren lässt:
BubbleSort(listAusgabe.Items);
und anschließend das letzte item von "Namen" in die Listbox schreibst:
listAusgabe.items.add(namen[n]);
Das ganze kann also gar nicht funktionieren. Es ist verwunderlich, dass überhaupt alle Namen wieder ausgegeben werden. Klickst Du nach jedem Einlesen auf den "Ausgabe-Button"? Oder hast Du uns einen wichtigen Teil des Quelltextes vorenthalten?
Da Dein BubbleSort ein TStrings erwartet, kannst Du aber auch nicht "Namen" übergeben. Eine Möglichkeit wäre:
Delphi-Quellcode:
procedure TForm1.btAusgabeClick(Sender: TObject);
var i: integer;
begin
listAusgabe.Items.Clear;
// wir müssen bei 1 beginnen, da Du das erste Element in 1 schreibst
for i:=1 to High(Namen) do
listAusgabe.Items.Add(Namen[i]);
BubbleSort(listAusgabe.Items);
end;
- UNGETESTET -
Allerdings wäre dann die bessere Lösung, die eingegebenen Namen gleich in die Listbox zu schreiben (ohne Array "dazwischen"), also:
Delphi-Quellcode:
procedure TForm1.btEinlesenClick(Sender: TObject);
begin
listAusgabe.Items.Add(edEingabe.Text);
end;
und bei der Ausgabe dann nur noch:
Delphi-Quellcode:
procedure TForm1.btAusgabeClick(Sender: TObject);
begin
BubbleSort(listAusgabe.Items);
end;
- Letzte Variante inzwischen ERFOLGREICH GETESTET -
Das
var beim BubbleSort noch entfernen und gut. Einziges Problem ist noch der
> (Größer als)-Operator. Der vergleicht auch Groß- und Kleinschreibung usw. Bessere Lösung wäre evtl. StrComp und/oder die Strings beim Vergleich
AnsiUpperCase-en, also z.B.:
if AnsiUpperCase(Items[i]) > AnsiUpperCase(Items[i + 1]) then
Grüsse
...Doc