Entwickler-Ecke

Sonstiges (Delphi) - rückgabewert


sunday_2 - Fr 29.11.02 11:00
Titel: rückgabewert
Hi,

ich habe folgendes Prob:

in einer Funktion will ich jeder Zahl bzw. jedem Buchstaben einen Wert zuweisen.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
function TSpieldefinition.buchstabe_zahl(Sender: String):integer;
var buchstabe: char;
    zahl:integer;
begin
        case buchstabe of
        '1': zahl:= 1;
        '2': zahl:= 2;
        '3': zahl:= 3;
        '4': zahl:= 4;
        '5': zahl:= 5;
        '6': zahl:= 6;
        '7': zahl:= 7;
        '8': zahl:= 8;
        '9': zahl:= 9;
        'a': zahl:= 10;
        'b': zahl:= 11;
        'c': zahl:= 12;
        'd': zahl:= 13;
        'e': zahl:= 14;
        'f': zahl:= 15;
        'g': zahl:= 16;
        'h': zahl:= 17;
        'i': zahl:= 18;
        'j': zahl:= 19;
        'k': zahl:= 20;
        'l': zahl:= 21;
        'm': zahl:= 22;
        'n': zahl:= 23;
        'o': zahl:= 24;
        'p': zahl:= 25;
        'q': zahl:= 26;
        'r': zahl:= 27;
        's': zahl:= 28;
        't': zahl:= 29;
        'u': zahl:= 30;
        'v': zahl:= 31;
        'w': zahl:= 32;
        'x': zahl:= 33;
        'y': zahl:= 34;
        'z': zahl:= 35;
        end;
        result:= zahl;
end;

in der Procedure rufe ich das so auf:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TSpieldefinition.b_zahlen_okClick(Sender: TObject);
var i,j: integer;
begin
        j:=0;
        j:= buchstabe_zahl(ComboBox_zahl.Text);
        AEvent[j].Zahl := e_zahl.Text;
        AEvent[j].Name := ComboBox_Zahl.Text;
end;

j sollte jetzt eigentlich den Wert von Zahl haben (also zwischen 1 und 35) bekommt aber eine 4630527.
Wer weiß wo der Fehler steckt?


Klabautermann - Fr 29.11.02 11:15
Titel: Re: rückgabewert
Hallo,
sunday_2 hat folgendes geschrieben:

Wer weiß wo der Fehler steckt?

Das ist einfach, du überprüfst in deiner Case Anweisung eine Variable (Buchstabe) der du keinen Wert zugewiesen hast. Deshalb erhällst du ein Undefiniertes Ergebniss.

Gruß
Klabautermann


sunday_2 - Fr 29.11.02 11:19

Wie sag ich den der Funktion das buchstabe den wert von ComboBox_zahl.text haben soll?


Klabautermann - Fr 29.11.02 11:33

Hallo,
sunday_2 hat folgendes geschrieben:
Wie sag ich den der Funktion das buchstabe den wert von ComboBox_zahl.text haben soll?

das geht nicht. Da Buchstabe eben nur ein Buchstabe ist und der Text in deiner Combobox ein String also viele Buchstaben sind.

Wenn du aber z.B. willst, dass der erste Buchstabe deines Parameters sender ausgewertet wird, dann siht das so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function TSpieldefinition.buchstabe_zahl(Sender: String):integer;
var buchstabe: char;
  zahl:integer;
begin
  IF (sender <> '') THEN
    Buchstabe := Sender[1]
  ELSE
    Buchstabe := ''
[...]

Desweiteren solltest du eine vorkehrung, für den Fall das Buchstabe einen unerwarteten Wert hat, treffen. Das machst du am besten, indem du einen ELSE Zweig in deiner CASE Abfrage einbaust:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[...]
    'x': zahl:= 33;
    'y': zahl:= 34;
    'z': zahl:= 35;
    ELSE
      Zahl := 0;
    end;
    result:= zahl;
end;

In diesem Fall wird wenn ein Fehler Auftritt eine 0 zurückgegeben. Das kannst du dann wieder andersw abfragen.

Gruß
Klabautermann


sunday_2 - Fr 29.11.02 11:50

Danke :D