Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - funktion manchmal klappts manchmal nicht ratlos warum


kdfssl - Do 19.03.09 20:47
Titel: funktion manchmal klappts manchmal nicht ratlos warum

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function wall_up (x:integer;y:integer):boolean;
 var i,h:integer;
 begin
 x:=x+1;
 for i:=1 to 2 do
 begin
   if ((x >= walls[i].x2) and (x <= walls[i].x3)) then
begin
 if (y <= walls[i].y3) and (y >= walls[i].y2)then
  h:=1
 end
 else
 result:=false;
 if h=1 then
 result:=true;
 end;
 end;


Was ich damit machen wollte: Ich grenze mit dem Feld ein Bereich ab der sozusagen gesperrt ist, den man nicht betreten darf, und die Funktion liefert false, wenn der bereich den ich betreten will, in dem code abgegrenzten Bereich liegt.

Problem: manchmal klappt diese function aber manchmal auch nicht


Wenn ihr wollt zeig ich euch den gesamten quelltext.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Xentar - Do 19.03.09 22:15

Du könntest damit anfangen, den Code vernünftig einzurücken, dass man sieht, welche Zeile zu welchem If gehört.

Danach:
Haltepunkt setzen (F5), Debugger benutzen..

Außerdem:
- Warum noch den Umweg über die Variable h? Warum nicht gleich das result auf true setzen?
- Hat das einen Grund, dass du bei der inneren if y3 und y2 vertauscht hast? Ich mein, im Vergleich zu den beiden X Werten.


Chemiker - Do 19.03.09 22:30

Hallo kdfssl,

Du hast h keinen Wert zugewiesen. Das bedeutet das wenn die IF-Abfrage nicht TRUE ist, h einen Zufallswert hat.

Bis bald Chemiker


BenBE - Fr 20.03.09 12:44

Irgendwie erinnert mich das an eine Diskussion, die ich grad vor paar Tagen erst selber wieder benötigt hab:
http://www.delphi-forum.de/viewtopic.php?t=83487

Ich denk mal, da sollte die Erklärung enthalten sein, die dir dieses "Mal klappt's" genauer erklärt, auch wenn's in der Diskussion speziell um Booleans geht.

P.S.: Es ist IMMER eine gute Idee, jegliche Warnungen des Compilers zu beheben, bevor man Programmverhaltensfehler sucht.