天啊,天啊,天啊,天啊,天啊,我自己都疯了,关于数层if和 for 的嵌套!!! (50分)

  • 主题发起人 主题发起人 hunyuan
  • 开始时间 开始时间
H

hunyuan

Unregistered / Unconfirmed
GUEST, unregistred user!

begin
if (abs(NewX-OldX)=abs(NewY-OldY)) then
begin
if OldX>NewX then
begin
for i:=NewX to OldX do
begin
if OldY>NewY then
for j:=NewY to OldY do
begin
if Abs(OldX-i)=Abs(OldY-j) then
if (Place[i,j].Color<>0) and
(Place[i,j].Color<>Place[OldX,OldY].Color) then
begin
Exit;
end;
end
else if OldY<NewY then
for j:=OldY to NewY do
begin
if Abs(OldX-i)=Abs(OldY-j) then
if (Place[i,j].Color<>0) and
(Place[i,j].Color<>Place[OldX,OldY].Color) then
begin
Exit;
end;
end;
end;
end
else if OldX<NewX then
begin
for i:=OldX to NewY do
begin
if OldY>NewY then
begin
for j:=NewY to OldY do
begin
if Abs(OldX-i)=Abs(OldY-j) then
if (Place[i,j].Color<>0) and
(Place[i,j].Color<>Place[OldX,OldY].Color) then
begin
Exit;
end;
end;
end
else if OldY<NewY then
for j:=OldY to NewY do
begin
if Abs(OldX-i)=Abs(OldY-j) then
if (Place[i,j].Color<>0) and
(Place[i,j].Color<>Place[OldX,OldY].Color) then
begin
Exit;
end;
end;
end;
end


怎么确定一个IF或FOR的结束,或是写这样的语句有什么原则吗?
 
搞什么的啊!你不知道在写代码之前现象嘛!换种算法。

也可以注释一下啊!写if的时候要配对的写
if 1>1 then
begin//first if
if 2>2 then//second if
begin

end
else//second else

end
else//first else
 
我这样写思路是有问题吧
或是有什么原则写这样的语句啊
 
用case of
....
...

end case
 
这么写会累死人的
 
用State模式
 
如果不是你的算法有問題那你就需要將你的
程序按一定的規格來進行縮格書寫
 
begin end成对写,写一个BEGIN先写好END,再在中间写代码,IF语句LEI类似,注意缩排
 
你应该再好好想想这个问题。。这么多的if 和 for 一定有更好的方法解决[:D]
 
不然就是注释了,比如
// end if *************
// end for *******
 
尽量不要自己写begin...end,
用delphi自带的代码模板——如先输入“ifb”,然后按ctrl+J。
 
楼上说的对!

请多用注释 //-----
 
我头晕……

一般来讲 IF 超过5层建议最好不要使用,不好维护。
 
呵呵,这样的代码我想不管怎样注释和美化都很难看。
建议根据你想要实现的逻辑,使用子程序来简化代码行数。

例如:
procedure doconditionproc1(val1,val2: integer);
begin
if compare(val1,val2) then
for i:=val1 to val2 do ...
else
for i:=val2 to val1 do ...
end;
... ...
begin
if condition1 then
doconditionproc1(val1,val2: integer)
else
doconditionproc2(val1,val2: integer)
end;

这样看上去就好看得多:)
 
书写代码的原则和规范楼上已经说了很多,我就不说啦。
你的代码应该可用gEXPERT帮你检查以下
 
你的代码本身就有问题
if OldX>NewX then
begin
for i:=NewX to OldX do
begin
if OldY>NewY then //????
。。。。
else if OldY<NewY then //?

你这不是自己整自己吗?里面的值又没有改 ,玩什么呢
 
多人接受答案了。
 
后退
顶部