我有一个名为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。请您让我知道有什么区别。
答案 0 :(得分:2)
iHighest
用于标记最大数字。如果它小于Marks[iInt]
,则必须对其进行更改,因此真实条件将为iHighest < Marks[iInt]
或Marks[iInt] > iHighest
希望您知道了。
答案 1 :(得分:2)
您想找到最高号。为此,您的条件是错误的。您的代码找到最低号。
代码中发生的情况的示例:
在某个时间点,iHighest
是42.4
; iInt
是2
,所以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
在每次更新时将采用较低的值,而不是较高的值。 >
只需阅读有关使用调试器的联机帮助。这比您想象的要容易得多。