【问题标题】:Creating and getting values "Array of Array structure"创建和获取值“数组结构的数组”
【发布时间】:2013-04-22 19:27:08
【问题描述】:

我正在尝试创建一个数组来获取数据(我之前添加过),将其称为“GameMap[i, j, k].Items[m].Index”或“GameMap[i, j, k].Count"

我在 delphi 中的 type 部分如下所示:

type
 TItemRec = record
 Index: Integer;
 Volume: Integer;
 Count: Integer;
 Id: string;
end;
TMApRec = record
  ID: LongWord;
  Count: integer;
  Order1: integer;
  Order2: integer;
  Order3: integer;
  Order4: integer;
  Order5: integer;
  Order6: integer;
  Order7: integer;
  Order8: integer;
  Order9: integer;
  Order10: integer;
  Items: array[0..9] of TItemRec;
end;

TMap = class

GameMap : array[0..8,0..14,0..$12] of TMapRec; 

例如,如果我现在这样做:

procedure TMap.Update;
 var
  i,j,k,m: integer;
 begin
  i:=0;
  while i < 8 do
  begin
   j:=0;
   while j < 14 do
   begin
    k:=0;
     while k < $12 do
     begin
      m:= 0;
      while m < 10 do
      begin
       showmessage('asdf');
       GameMap[i,j,k].Items[m].Id:= (inttostr(i)+' '+inttostr(j)+' '+inttostr(k)+' '+inttostr(m));
       showmessage((GameMap[i,j,k].Items[m].Id));
       inc(m);
      end;
      inc(k);
     end;
     inc(j);
    end;
    inc(i);
   end;

它只会显示第一个 showmessage('asdf'),但随后会崩溃 如果你想突出显示,这里有完整的代码http://pastebin.com/xfL94QXU

再次感谢你们的时间

【问题讨论】:

  • 您确实需要花更多的精力来描述问题。 “它工作不正常,通常是错误”和“不允许我服用”并没有真正的帮助;除了您之外,它们对任何人都没有任何意义,因为我们看不到您的屏幕或读懂您的想法。请记住,除了您在此处告诉我们的信息外,我们对您的问题的信息为零;如果你没有清楚地解释问题,那么很难弄清楚如何解决它。
  • 也许你忘记了 end,换句话说,它对我有用,例如:GameMap[0,1,$2].Items[3].Id := 4; 请重新格式化你的帖子以正确显示代码。
  • 请看第一篇,我又写了一遍
  • 您是否创建了 TMap 对象?您仍然没有显示所有相关代码。
  • “这里崩溃了”一点都不好。您需要提供完整的错误消息。

标签: arrays delphi delphi-xe2


【解决方案1】:

如果您未能实例化TMap 的实例,您的代码会产生运行时错误的唯一方法。

我怀疑调用Update 的代码看起来像这样:

var
  Map: TMap;
begin
  Map.Update;
end;

这将失败,因为Map 未初始化。像这样修复它:

var
  Map: TMap;
begin
  Map := TMap.Create;
  try
    Map.Update;
  finally
    Map.Free;
  end;
end;

作为更一般的建议,我强烈建议您阅读有关如何创建Short, Self Contained, Correct (Compilable), Example 的信息。

【讨论】:

  • :谢谢大卫,你完全正确,不记得了!!!谢谢你们帮助我=D
【解决方案2】:

首先为您的Items 记录声明type

type
  TItemRec = record
    Index: Integer;
    Volume: Integer;
    Count: Integer;
    Id: Integer;
  end;

现在在您的 GameMap 中使用该类型:

GameMap : array[0..8,0..14,0..$12] of record
  ID: LongWord;
  Count: integer;
  Order1: integer;
  Order2: integer;
  Order3: integer;
  Order4: integer;
  Order5: integer;
  Order6: integer;
  Order7: integer;
  Order8: integer;
  Order9: integer;
  Order10: integer;
  Items: array[0..9] of TItemRec;
end;

【讨论】:

  • 在清晰的道路上,也值得“提取”外部结构。
  • 好吧,我又写了第一篇文章..但仍然窃听:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
相关资源
最近更新 更多