![]() |
Fehlermeldung bei der Ausgabe eines Char array
Bin grad dabei ein Hangman spiel zu Programmieren... hab dafür ne eigene klasse geschrieben. Wenn ich im FormCreate nun per for schleife mein char array ausgeben lasse, dann funktionierts perfekt ohne Fehlermeldung... aber wenn ich etwas in meinem array verändere und dann das selbe noch mal versuche kriege ich folgenden Fehler:
Zitat:
Delphi-Quellcode:
Und hier mein Formular: (beim Button1OnClick passiert der fehler);
unit HangManClasses;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs ; type THangManWord = class private FWord: string; FCharWord: array of char; FWordLength: integer; function ClearWord: boolean; function GetCharWord(index: integer): char; procedure SetCharWord(index: integer; a: char); public property Word: string read FWord write FWord; property CharWord[index: integer]: char read GetCharWord write SetCharWord; property WordLength: integer read FWordLength write FWordLength; procedure NewWord(a: string); procedure TestLetter(a: Char); end; implementation function THangManWord.ClearWord: boolean; begin try FWord:=''; FWordLength:=0; result:=true; except result:=false; end; end; function THangManWord.GetCharWord(index: integer): char; begin result:=FCharWord[index]; end; procedure THangManWord.SetCharWord(index: integer; a: char); begin FCharWord[index]:=a; end; procedure THangManWord.NewWord(a: string); var i:integer; begin if ClearWord = true then begin Word:= a; WordLength:= Length(a); SetLength(FCharWord, WordLength); for i:=0 to WordLength do begin FCharWord[i]:='_'; end; end; end; procedure THangManWord.TestLetter(a: Char); var i:integer; begin for i:=0 to WordLength do begin if Word[i] = a then begin SetCharWord(i,a); end; end; end; end.
Delphi-Quellcode:
unit Main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, HangManClasses, StdCtrls; type TFormMain = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var FormMain: TFormMain; HangManWord: THangManWord; implementation {$R *.dfm} procedure TFormMain.FormCreate(Sender: TObject); var i:integer; output:string; begin HangManWord:=THangManWord.Create; HangManWord.NewWord('heiko'); SetLength(output,hangmanword.WordLength); for i:=0 to HangManWord.WordLength do begin output[i]:=HangManWord.CharWord[i]; end; edit1.Text:=output; end; procedure TFormMain.FormDestroy(Sender: TObject); begin HangManWord.Free; end; procedure TFormMain.Button1Click(Sender: TObject); var a:char; output: string; i:integer; begin a:=edit2.text[1]; Hangmanword.TestLetter(a); for i:=0 to HangManWord.WordLength do begin output[i]:=HangManWord.CharWord[i]; end; edit1.Text:=output; end; end. |
Re: Fehlermeldung bei der Ausgabe eines Char array
Moin Chaosente,
ich denke mal, dass der Fehler darin besteht, dass Du immer bis WordLength durch die Schleifen gehst. Da aber der Index bei 0 anfängt, ist die Obergrenze WordLength-1. Du könntest es natürlich auch mal mit high(output) bzw. den anderen Arraybezeichnern für die Obergrenze versuchen. |
Re: Fehlermeldung bei der Ausgabe eines Char array
Dynamische Arrays laufen von 0 bis Länge - 1. Strinsg von 1 bis Länge.
|
Re: Fehlermeldung bei der Ausgabe eines Char array
Muss euch enttäuschen, lag daran, das ich beim zweiten mal vorher nciht die länge des strings festgelegt hatte in dem ausgegeben wird, aber trotzdem danke.
|
Re: Fehlermeldung bei der Ausgabe eines Char array
Hier muss es krachen:
Delphi-Quellcode:
Wenn FCharWord das dynamische Char-Array ist. Begründung siehe oben.
procedure THangManWord.NewWord(a: string);
var i:integer; begin if ClearWord = true then begin Word:= a; WordLength:= Length(a); SetLength(FCharWord, WordLength); for i:=0 to WordLength do begin FCharWord[i]:='_'; end; end; end; Und diese Schleife:
Delphi-Quellcode:
muss von ein bis WordLength laufen, Word ein String ist.
procedure THangManWord.TestLetter(a: Char);
var i:integer; begin for i:=0 to WordLength do begin if Word[i] = a then begin SetCharWord(i,a); end; end; end; Auch hier sollte es krachen:
Delphi-Quellcode:
procedure TFormMain.Button1Click(Sender: TObject);
var a:char; output: string; i:integer; begin a:=edit2.text[1]; Hangmanword.TestLetter(a); for i:=0 to HangManWord.WordLength do begin output[i]:=HangManWord.CharWord[i]; end; edit1.Text:=output; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz