Delphi 比较数组中的实数
我有一个名为Marks的数组,它包含5个元素。我想在数组中循环,并获得Marks数组中最高的项。当我运行下面的代码时,我得到了23.45Delphi 比较数组中的实数,delphi,delphi-2010,Delphi,Delphi 2010,我有一个名为Marks的数组,它包含5个元素。我想在数组中循环,并获得Marks数组中最高的项。当我运行下面的代码时,我得到了23.45 var Marks: array[0..4] of real = (42.4,65.34,24.12,23.45,43.24); iHighest : real; iInt : integer; begin iHighest := Marks[0]; for iInt:= 0 to 4 do begin if (iHighest >=
var
Marks: array[0..4] of real = (42.4,65.34,24.12,23.45,43.24);
iHighest : real;
iInt : integer;
begin
iHighest := Marks[0];
for iInt:= 0 to 4 do
begin
if (iHighest >= Marks[iInt]) then
iHighest := Marks[iInt];
end;
end;
ShowMessage('Highest Mark: ' + FloatToStr(iHighest)); // Returns 23.45
但是当我将if语句更改为
if(Marks[iInt]>=iHighest)
时,showmessage返回65.34的正确答案。请告诉我区别是什么。iHighest
用于标记最大数。如果它小于Marks[iInt]
,则必须更改它,因此真正的条件将是iHighest
或Marks[iInt]>iHighest
希望你收到了
iHighest
用于标记最大数。如果它小于Marks[iInt]
,则必须更改它,因此真正的条件将是iHighest
或Marks[iInt]>iHighest
希望你收到了 您希望找到最大的数字。因此,你的情况是错误的。您的代码会找到最低的数字
代码中发生的情况示例:
在某个时间点,iHighest
是42.4
iInt
是2
,因此标记[iInt]
是24.12
然后iHighest>=24.12
,因此它变成24.12
换句话说,iHighest
的新值低于初始值
但是,如果要查找最大的数字,则只有当当前调查的数字(标记[iInt]
)高于当前的iHighest
,才可以更新iHighest
而且,由于无论如何都要使用第一个元素(索引0)初始化iHighest
,因此只需检查其他元素:
请注意,也不需要使用=
进行检查。仅当当前值较高时更新iHighest
,如果当前值相等则不更新
自己找出此类错误的最佳方法是调试Delphi调试器非常易于使用,可以一步一步、一行一行地向您显示值是如何变化的。如果您使用了调试器,您会看到在代码中,iHighest在每次更新时是如何采用较低的值,而不是较高的值的 只需阅读有关使用调试器的联机帮助。这比你想象的要容易得多 您希望找到最大的数字。因此,你的情况是错误的。您的代码会找到最低的数字 代码中发生的情况示例: 在某个时间点,
iHighest
是42.4
iInt
是2
,因此标记[iInt]
是24.12
然后iHighest>=24.12
,因此它变成24.12
换句话说,iHighest
的新值低于初始值
但是,如果要查找最大的数字,则只有当当前调查的数字(标记[iInt]
)高于当前的iHighest
,才可以更新iHighest
而且,由于无论如何都要使用第一个元素(索引0)初始化iHighest
,因此只需检查其他元素:
请注意,也不需要使用=
进行检查。仅当当前值较高时更新iHighest
,如果当前值相等则不更新
自己找出此类错误的最佳方法是调试Delphi调试器非常易于使用,可以一步一步、一行一行地向您显示值是如何变化的。如果您使用了调试器,您会看到在代码中,iHighest在每次更新时是如何采用较低的值,而不是较高的值的
只需阅读有关使用调试器的联机帮助。这比你想象的要容易得多 通过代码调试可以回答您的问题,当您逐步调试代码时,您将能够看到每次循环迭代都会发生什么。想象一下,您希望从一些男孩那里找到最高的。你在墙上标出第一个人的高度,然后检查其他人。只有当当前boy
Marks[iInt]
较高时,才会更新该标记(iHighest
)。如果以相同的操作数顺序编写新的if语句(在代码中进行最高的调试可以为您提供问题的答案,当您逐步调试代码时,您将能够看到每次循环迭代都会发生什么。假设您希望从一些男孩中找到最高的。您在墙上标记第一个男孩的高度,然后检查其他人。您将更新该标记(iHighest
)仅当当前boy标记[iInt]
较高时。如果您以相同的操作数顺序编写新的if语句if(iHighest
for iInt := 1 to 4 do // not: 0 to 4
if Marks[iInt] > iHighest then // not the other way around
iHighest := Marks[iInt];