![]() |
Problem: Array-Typ erforderlich
Hallo,
hab hier ein programm geschriben, aber nur mit zwei fehlern bitte helft mir hier ist das Programm:
Delphi-Quellcode:
hab die fehlerstellen in Klammern angegeben.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure Edit2Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; zufall : array[0..9] of integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var a,b : integer; zufall : array[1..10]of integer; begin randomize; a:=1; for a:=1 to 10 do begin StringGrid1.Cells[a-1,0]:=inttostr(a); b:=random(0-99); zufall[a,0]:=b; (Fehler hier!) end; edit1.Text:='?'; edit2.Text:='?'; end; procedure TForm1.Edit2Change(Sender: TObject); var a,b : integer; c : array[0..9] of integer; begin Edit1.Text:=inttostr(a); strtoint(a):=b; c[a,0]:=Edit2.Text;( Fehler hier!) end; end. |
Re: Problem: Array-Typ erforderlich
Du versuchst, 2-dimensionale Werte in einem eindimensionalen Array zu speichern.
|
Re: Problem: Array-Typ erforderlich
Der Fehler lieg wohl eher eine Zeile vorher:
Statt
Delphi-Quellcode:
sollte es wohl
strtoint(a):=b;
Delphi-Quellcode:
heißen
b := strtoint(a);
|
Re: Problem: Array-Typ erforderlich
ich verstehe den ersten fehler nicht , wenn ich den erst verstehe kann ich den zweiten schon irgendwie selber beheben.
|
Re: Problem: Array-Typ erforderlich
Delphi-Quellcode:
hab den zweiten so umgearbeitet geht aber trotzdemm nicht
procedure TForm1.Edit2Change(Sender: TObject);
var a,b : integer; c : array[0..9] of integer; begin Edit1.Text:=inttostr(a); b:=strtoint(a); c[b,0]:=Edit2.Text; end; |
Re: Problem: Array-Typ erforderlich
Weil c ein Eindimensionales Array ist und Du aber, wie Detlef schon sagte, auf eine zweite Dimension greifst. Versuch es mal so:
Delphi-Quellcode:
Desweiteren hast Du einmal eine globale Variable (Pfui!), die Zufall heißt und einmal eine gleichnamige lokale Variable. Ist nicht gerade ideal ;)
procedure TForm1.Edit2Change(Sender: TObject);
var a,b : integer; c : array[0..9] of integer; begin Edit1.Text:=inttostr(a); b:=strtoint(a); c[b]:=Edit2.Text; end; |
Re: Problem: Array-Typ erforderlich
AHH danke DaddyH! jetzt verstehe ich meinen fehler.
|
Re: Problem: Array-Typ erforderlich
hier stimmt doch irgendwas überhaupt nicht:
Delphi-Quellcode:
a ist undefiniert und somit würde in Edit1.Text was undefineirtes stehen.
Edit1.Text:=inttostr(a);
b:=strtoint(a); die zweite zeile geht nicht weil a ein ordinaler Typ ist und kein String (strtoint erwartet aber einen string und keinen ordinalen wert) |
Re: Problem: Array-Typ erforderlich
Jetzt habe ich eine Frage :)
kann ich bei diesen Programm auf die globale Variable zufall verzichten, oder ist sie unbedingt nötig? |
Re: Problem: Array-Typ erforderlich
Delphi-Quellcode:
wieso ist b jetzt Tcaption und nicht integer?
procedure TForm1.Edit2Change(Sender: TObject);
var a : string; b : integer; c : array[0..9] of integer; begin Edit1.Text:=a; b:=strtoint(a); c[b]:=Edit2.Text; (fehler) end; verstehe ich gar nicht |
Re: Problem: Array-Typ erforderlich
Am besten verrätst du uns was das Ziel des Codes sein soll. Denn so wie er jetzt ist macht er keinen Sinn außer das dein Prozessor etwas zu tun hat :-)
Delphi-Quellcode:
Edit1.Text:=a; //a ist undefiniert - dank des compilers der den string initialisiert ist a '' und somit steht dann in Edit1 nichts
b:=strtoint(a); //hier kracht es später weil '' keine gültige zahl ist c[b]:=Edit2.Text; //Edit2.Text ist ein String, dein Array hingegen vom Typ Integer. Ein String ist was anderes als ein Integer und somit geht die Zuweisung nicht |
Re: Problem: Array-Typ erforderlich
Ok
Das programm soll beim start zufallszahlen von 0 biss 99 speichern. Und zwei editfelder dienen dazu, dass ich in einen die nummer des zufallszahls eingebe und das andere editfeld mir diese zufallzahl selbst zeigt. hoffe es ist verständlich |
Re: Problem: Array-Typ erforderlich
hab das jetzt so gemacht:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure Edit2Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var a,b : integer; zufall : array[1..10]of integer; begin randomize; a:=1; for a:=1 to 10 do begin StringGrid1.Cells[a-1,0]:=inttostr(a); b:=random(100); zufall[a]:=b; end; edit1.Text:='?'; edit2.Text:='?'; //Fehlermelding: Im Project Project1.exe ist eine Exception der Klasse EConverError aufgetreten. Meldung "?' ist kein gültiger Integerwert'. Wieso? vorher ging es doch alles, die ' ' stehen doch da! end; procedure TForm1.Edit2Change(Sender: TObject); var a : string; b,d : integer; c : array[0..9] of integer; begin a:=Edit1.Text; b:=strtoint(a); c[b]:=d; Edit2.Text:=inttostr(d); end; end. |
Re: Problem: Array-Typ erforderlich
Die Fehlermeldung wird eher im OnChange des Edit2 kommen ;)
Delphi-Quellcode:
Wenn a ein '?' ist kann es nat. nicht in integer umgewandelt werden ;)
a:=Edit1.Text;
b:=strtoint(a); |
Re: Problem: Array-Typ erforderlich
Delphi-Quellcode:
das soll doch nur beim OnChange gehen
procedure TForm1.Edit1Change(Sender: TObject);
var a : string; b,d : integer; c : array[0..9] of integer; begin a:=Edit1.Text; b:=strtoint(a); c[b]:=d; Edit2.Text:=inttostr(d); end;
Delphi-Quellcode:
ist bei FormCreate
edit1.Text:='?';
edit2.Text:='?'; oder hab cih da was falsch gemacht? |
Re: Problem: Array-Typ erforderlich
Entweder die Konvertierung in try..except einschließen oder TryStrToInt() verwenden
|
Re: Problem: Array-Typ erforderlich
In der Schule ging irgendwie alles, zuhause geht aber nie was :(
|
Re: Problem: Array-Typ erforderlich
Wo soll ich TryStrToInt() einsetzen?
|
Re: Problem: Array-Typ erforderlich
Delphi-Quellcode:
if not TryStrToInt(a,b) then //Hier auf Fehler reagieren
|
Re: Problem: Array-Typ erforderlich
das bringt mich leider nicht weiter.
|
Re: Problem: Array-Typ erforderlich
Zitat:
|
Re: Problem: Array-Typ erforderlich
hmm ok nachdem ich die delphi hielfe 10 durchgelesen habe, habe ichs verstanden, der fehler ist weg, aber es kommt der falsche ergebnis in edit1 raus.
|
Re: Problem: Array-Typ erforderlich
Zitat:
|
Re: Problem: Array-Typ erforderlich
Delphi-Quellcode:
das programm läuft ohne fehler aber es erzäugt keine zufallszahlen beim start es wird immer die gleich zahl in edit1 ausgegeben. und zwar 4369708
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure Edit2Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var a,b : integer; zufall : array[1..10]of integer; begin randomize; a:=1; for a:=1 to 10 do begin StringGrid1.Cells[a-1,0]:=inttostr(a); b:=random(100); zufall[a]:=b; end; edit1.Text:='?'; edit2.Text:='?'; end; procedure TForm1.Edit2Change(Sender: TObject); var a : string; b,d : integer; c : array[0..9] of integer; begin a:=Edit2.Text; {b:=StrToInt(a);} if not TryStrToInt(a,b) then c[b]:=d; Edit1.Text:=inttostr(d); end; end. |
Re: Problem: Array-Typ erforderlich
Lass mal
Delphi-Quellcode:
weg
randomize;
|
Re: Problem: Array-Typ erforderlich
hilft nicht. das problem ist das schon beim start in edit1 4369708 steht und nicht '?'
|
Re: Problem: Array-Typ erforderlich
das ist doch klar. Dadurch das du Edit2.Text ein Fragezeichen zuweist wird das OnChange ausgelöst
|
Re: Problem: Array-Typ erforderlich
ich hab das mit '?' weggelassen dann steht zwar beim start 4369708 nicht aber beim esten verändern on edit2 obwohl da die zahl von 0-99 stehen soll. ist mit meinem randim etwas falsch? auserdem endert sich edit1 nur bei erstem verändern von edit2 bei 2,3 verändern passiert wieder nichts.
|
Re: Problem: Array-Typ erforderlich
gehe doch einfach mal zeile für Zeile von Edit2Change durch. Dann wirst du den Grund sehen. Der Inhalt der Funktion entbehrt jeglicher Logik. Schaue einfach mal in die Hilfe was genau die entsprechenden Funktionen machen und zurück geben welche du verwendest.
|
Re: Problem: Array-Typ erforderlich
Hmm hast du überhaupt ne Ahnung was du da machst?
Fällt dir hier was auf:
Delphi-Quellcode:
Das ist genau das gleiche was du hast.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure Edit2Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var a: integer; begin randomize; for a := 1 to 10 do begin StringGrid1.Cells[a-1,0] := inttostr(a); end; edit1.Text:='?'; edit2.Text:='?'; end; procedure TForm1.Edit2Change(Sender: TObject); var d : integer; begin Edit1.Text:=inttostr(d); end; end. |
Re: Problem: Array-Typ erforderlich
o.O und was sol dein program machen? nur den stringrid bennen?
|
Re: Problem: Array-Typ erforderlich
Delphi-Quellcode:
habs endlich danke and alle die soviel Geduld mit mir hatten =)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure Edit1Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; zufall : array[0..9]of integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var a,b : integer; begin randomize; a:=1; for a:=1 to 10 do begin StringGrid1.Cells[a-1,0]:=inttostr(a); b:=random(100); zufall[a-1]:=b; end; {edit1.Text:='?'; edit2.Text:='?';} end; procedure TForm1.Edit1Change(Sender: TObject); var a : string; b : integer; begin a:=Edit1.Text; b:=zufall[strtoint(a)]; Edit2.Text:=inttostr(b); end; end. |
Re: Problem: Array-Typ erforderlich
Du solltest aber trotzdem mit möglichen Falscheingaben des Anwenders rechnen
|
Re: Problem: Array-Typ erforderlich
ja ich weiß wenn eine zahl höher als 10 ind edit1 eingegeb wird kommt ein fehler
|
Re: Problem: Array-Typ erforderlich
Auch wenn er nichts eingibt oder was anderes als Zahlen.
|
Re: Problem: Array-Typ erforderlich
Zitat:
Ich hab nur die unnötigen Zeilen rausgestrichen :zwinker: Hier mal ein Vorschlag (mit Gültigkeitsabfrage xD)
Delphi-Quellcode:
edit: Die Zeile muss so heißen:
procedure TForm1.FormCreate(Sender: TObject);
var a : integer; begin randomize; for a := 1 to 10 do begin StringGrid1.Cells[a-1,0] := inttostr(a); zufall[a-1] := random(100); end; end; procedure TForm1.Edit1Change(Sender: TObject); var b : integer; begin if TryStrToInt(Edit1.Text, b) and (b in [1..10]) then begin Edit2.Text := IntToStr(zufall[b]); end else begin showmessage('Böse! Gib gefälligst eine gültige Zahl ein!'); end; end;
Delphi-Quellcode:
if TryStrToInt(Edit1.Text, b) and (b in [0..9]) then
|
Re: Problem: Array-Typ erforderlich
Ja Dominik es geht habs nur bisl modifiziert
Delphi-Quellcode:
aber ich habs etwas anders versucht ging aber nicht und zwar :
begin
if TryStrToInt(Edit1.Text, b) and (b in [0..9]) then begin Edit2.Text := IntToStr(zufall[b]); end else begin Edit1.Text:=''; Edit2.Text:='?'; end; end;
Delphi-Quellcode:
var a : string;
b,c : integer; begin a:=Edit1.Text; c:=strtoint(a); If 1<=c<=10 then // hier kamm der fehler begin Edit2.Text:='?'; Edit1.Text:=''; end else begin b:=zufall[strtoint(a)]; Edit2.Text:=inttostr(b); end; end; |
Re: Problem: Array-Typ erforderlich
Delphi-Quellcode:
var a : string;
b,c : integer; begin a:=Edit1.Text; c:=strtoint(a); // und hier knallt es, wenn a keine Zahl ist! If (1<=c) and (c<=10) then // hier kommt er nicht mehr begin Edit2.Text:='?'; Edit1.Text:=''; end else begin b:=zufall[strtoint(a)]; Edit2.Text:=inttostr(b); end; end; |
Re: Problem: Array-Typ erforderlich
dafür kommt ein fehler wenn im Edit keine gültige zahl steht :-D
|
Re: Problem: Array-Typ erforderlich
Irgendwie scheint er uns nicht zu vertrauen bzw. versteht unseren und wohl seinen eigene Code nicht. :gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 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