比较数组中的实数

Comparing Real Numbers in an Array

我有一个名为 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) 时,显示消息 returns 正确答案为 65.34。请告诉我有什么区别。

iHighest表示最大数。如果它小于 Marks[iInt],则必须更改它,因此真实条件将是 iHighest < Marks[iInt]Marks[iInt] > iHighest

希望你明白了。

您想找到 最高 的数字。为此,你的情况是错误的。您的代码找到了 最低的 数字。

您的代码中发生的示例: 在某个时间点,iHighest42.4iInt2,所以 Marks[iInt]24.12然后iHighest >= 24.12,所以变成24.12! 也就是说,iHighestnew值是比初始值低

但是,如果你想找到最高的数,那么只有当前调查的数 (Marks[iInt])是比当前iHighest,你更新iHighest

并且由于您无论如何都使用第一个元素(索引 0)初始化 iHighest,因此您只需检查 others:

for iInt := 1 to 4 do            // not: 0 to 4
  if Marks[iInt] > iHighest then // not the other way around
    iHighest := Marks[iInt];

请注意,也无需使用 >= 检查。如果当前值 更高 ,则仅更新 iHighest,如果 等于

,则不会更新

自己找出此类错误的最佳方法是调试。 Delphi 调试器非常易于使用 并且可以向您 逐步显示,逐行显示,价值观如何变化。 如果您使用过调试器,您会看到在您的代码中 iHighest 如何在每个更新。

只需阅读有关使用调试器的联机帮助。这比你想象的要容易得多。