比较数组中的实数

时间:2018-09-10 04:20:47

标签: 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[iInt]) then
    iHighest := Marks[iInt];
  end;
end;
ShowMessage('Highest Mark: ' + FloatToStr(iHighest)); // Returns 23.45

但是当我将if语句更改为if (Marks[iInt] >= iHighest)时,showmessage返回正确的答案65.34。请您让我知道有什么区别。

2 个答案:

答案 0 :(得分:2)

iHighest用于标记最大数字。如果它小于Marks[iInt],则必须对其进行更改,因此真实条件将为iHighest < Marks[iInt]Marks[iInt] > iHighest

希望您知道了。

答案 1 :(得分:2)

您想找到最高号。为此,您的条件是错误的。您的代码找到最低号。

代码中发生的情况的示例: 在某个时间点,iHighest42.4iInt2,所以Marks[iInt]24.12然后iHighest >= 24.12,使其变为24.12换句话说,iHighest new 更低大于初始值。

但是,如果您要查找最高编号,则仅当当前调查的编号 (Marks[iInt]更高比当前的iHighest,您需要更新iHighest

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

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

请注意,也无需检查>=。如果当前值是 higher ,则仅更新iHighest,而不是等于


自己找出此类错误的最佳方法是调试。 Delphi调试器非常易于使用 ,并且可以逐步,逐行向您展示 更改。 如果您使用过调试器,您将看到在代码中 iHighest 在每次更新时将采用较低的值,而不是较高的值。 >

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