比较数组中的实数
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
希望你明白了。
您想找到 最高 的数字。为此,你的情况是错误的。您的代码找到了 最低的 数字。
您的代码中发生的示例:
在某个时间点,iHighest
是 42.4
; iInt
是 2
,所以 Marks[iInt]
是 24.12
。 然后iHighest >= 24.12
,所以变成24.12
! 也就是说,iHighest
的new值是比初始值低。
但是,如果你想找到最高的数,那么只有当前调查的数 (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
如何在每个更新。
只需阅读有关使用调试器的联机帮助。这比你想象的要容易得多。
我有一个名为 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
希望你明白了。
您想找到 最高 的数字。为此,你的情况是错误的。您的代码找到了 最低的 数字。
您的代码中发生的示例:
在某个时间点,iHighest
是 42.4
; iInt
是 2
,所以 Marks[iInt]
是 24.12
。 然后iHighest >= 24.12
,所以变成24.12
! 也就是说,iHighest
的new值是比初始值低。
但是,如果你想找到最高的数,那么只有当前调查的数 (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
如何在每个更新。
只需阅读有关使用调试器的联机帮助。这比你想象的要容易得多。