Delphi 比较数组中的实数

Delphi 比较数组中的实数,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 >=

我有一个名为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 >= 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];