【问题标题】:Function returning false on array and integer compare?函数在数组和整数比较上返回false?
【发布时间】:2019-11-18 11:38:31
【问题描述】:

我正在尝试检查数组中是否存在整数值,但即使数组中存在整数,该函数也会返回 false。

这是我正在使用的代码。错误是 404 但它返回 false:

const
  cErrors: array [0 .. 3] of integer = (401, 404, 409, 411);

function isInError(const error: integer; const sArray: array of integer): Boolean;
var
  i: integer;
begin
  Result := False;
  for i in sArray do
    if sArray[i] = error then
      Result := True;
  ShowMessage(error.ToString);// it's returining false always and this showmessage is just verify the error code
end;

我这样称呼它:

if (isInError(sPdf.LastErrorCode, cErrors)) then
  ShowMessage(sPdf.LastErrorCode.toString);

【问题讨论】:

  • 您希望i 在您的for i in sArray 行中保留什么值?当您在调试器中单步执行代码时,您看到isArray[i] 的值是多少?顺便说一句,范围检查的默认设置是关闭的。建议你去Project - Options开启Compiler settings - Range checking
  • @TomBrunberg 首先我看到了var i is 75395520 sArray is 401 404 409 411,然后是var i is 401 然后var i is 404 等等。
  • 我还问:期望i在你的for i in sArray行中保持什么价值?。你对此的回答是什么?
  • @Amo,Tom 所说的是一个提示,因此您可以找出错误。 for..in 循环迭代数组内容,而不是其索引。启用范围检查后,您会立即发现错误。
  • 正如@LURD 所说,for..in 循环迭代内容,正如您已经看到的 401、402 .... IOW 您可以将 ierror 进行比较。如果您使用传统方式for i := 0 to Length(array)-1 do ...,那么您将使用您当前的if array[i] = error ...

标签: delphi firemonkey


【解决方案1】:

这看起来不对:

  for i in sArray do
    if sArray[i] = error then

for .. in 已经从数组中提取了值。

  for i in sArray do
    if i = error then

同时打开范围检查以确保您没有超出数组边界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多