【问题标题】:Array Implementation in Delphi xe6Delphi xe6中的数组实现
【发布时间】:2014-07-26 09:23:49
【问题描述】:

我想用 r 的元素填充最后三个编辑。不知何故,我的价值没有改变。请看一看!

    procedure TForm1.Button1Click(Sender: TObject);
    var
      r: Array of Real;
      cod,h,N,code,i: Integer;
      value: Real;
    begin


      Val(Edit1.Text, cod, code);
      Val(Edit2.Text, h, code);
      Val(Edit3.Text, N, code);

      Edit1.Text := Edit1.Text;
      Edit2.Text := Edit2.Text;
      Edit3.Text := Edit3.Text;
      setlength(r, N);
      i:= 0;
      while i<= N do
         begin

          r[i] := cod/2 + h*i;
          i := i + 1;
        end;

      Edit4.Text := formatfloat('#.0', r[0]);
      Edit5.Text := formatfloat('#.0', r[1]);
      Edit6.Text := formatfloat('#.0', r[2]);
    end;

    end.

【问题讨论】:

  • 我能看到i 没有改变的唯一原因是读取N 时出错。我可能会使用 StrToInt 而不是 val
  • 请您提供一个带有硬编码输入的 SSCCE,而不是提供指代 GUI 控件的代码,其内容我们只能猜测。或者,我将您推荐给出色的调试器。
  • @JamesBarrass:在这种情况下,如果不忽略结果,TryStrToint 可能会更好。在这里,code 永远不会检查错误,它只是被忽略。我也不明白 Edit.Text := Edit1.Text 应该做什么,或者为什么使用 while 循环而不是 for 循环。
  • @RudyVelthuis 同意,我之所以指出这一点,是因为我看到 Val 直接使用的很少,以至于我花了一点时间才意识到 N 的设置位置。
  • @JamesBarrass:是的,直接使用 Val 很老派。 Real 的使用也是如此。我猜这是取自一个非常古老的例子。

标签: arrays delphi delphi-xe6


【解决方案1】:

您的代码包含许多无用和错误的代码。所以我会根据给定的信息尽可能地修复它。我为所有 local 变量添加了前缀 L

procedure TForm1.Button1Click(Sender: TObject);
var
  Lr : Array[0..2] of Real;
  Lcod, Lh : Integer;
  LIdx : Integer;
begin

  // throws an exception if Edit1.Text cannot converted to an Integer
  Lcod := StrToInt( Edit1.Text );
  // throws an exception if Edit2.Text cannot converted to an Integer
  Lh := StrToInt( Edit2.Text );

  for LIdx := 0 to 2 do
    Lr[LIdx] := Lcod/2 + Lh*LIdx;

  Edit4.Text := FormatFloat( '#.0', Lr[0] );
  Edit5.Text := FormatFloat( '#.0', Lr[1] );
  Edit6.Text := FormatFloat( '#.0', Lr[2] );
end;

【讨论】:

  • +1 用于为局部变量名添加前缀。我使用小写前缀,但我认为这是很久以前对我的 camelCase 同事的让步。
  • 此外,Real 数据类型已被弃用,long - 它目前映射到 double,因此应该使用它。 Real 是一个奇怪的 6 字节浮点类型,在上个世纪的某个时候已经过时了。
  • @SirRufo 非常感谢,它有效!顺便说一句,我是 Delphi 的新手,只是在 Python 方面有一些初学者的经验,所以你能推荐一些帮助指南或类似的东西吗?我需要编写一个完整的绕组模型,这将是一个很大的帮助。谢谢。
  • Real 最初不支持 FPU。所有 FP 例程都是在代码中完成的。后来,它(可选地)支持 FPU(当 FPU 变得无处不在时),只需转换为 Double,传递给 FPU 并将结果转换回 Real48(现在称为)。
猜你喜欢
  • 2014-09-07
  • 2015-10-14
  • 2023-03-09
  • 2014-10-08
  • 2014-07-08
  • 1970-01-01
  • 2014-10-22
  • 2014-09-25
  • 2016-12-11
相关资源
最近更新 更多