我正在做一些定义如何制作程序的作业,procedure DoSort
。
该过程有一个局部变量,称为“数据”,它是一个由25个整数组成的数组。
data : array[0..24] of Integer;
该程序有四个主要步骤:
1)PopulateArray(数据)
2)ShowNumbersInList(数据)
3)PlotBars(数据)
4)排序(数据)
这些步骤都是对额外程序的过程调用。但是,如果我像这样编码,则每次调用DoSort
时都会使用不同的值重新填充数组。我需要在初始调用时才填充数组。我尝试了很多东西......
if data[0] = data[1]
if data[0] = nil
if data[0].free
if data.free
if data = nil
等。我需要在不创建另一个变量的情况下执行此操作,即firstRun : Boolean
。基本上,我需要做的是检查数组是否已填充
procedure DoSort();
Var
data : array[0..24] of Integer;
begin
if data[0] = data[1] then // DOESN'T WORK
begin
PopulateArray(data);
end
else
begin
ShowNumbersInList(data);
PlotBars(data);
Sort(data);
end;
end;
这让我发疯,因为我无法弄明白。有人可以帮忙吗?感谢。
答案 0 :(得分:0)
您的data
数组是您的程序DoSort()
的本地数组。这意味着每次调用DoSort()
时,都会使用未初始化的数组。 (在堆栈上分配)。
要保留数据,请将其声明在您的过程范围之外,并通过引用procedure DoSort(var data: array of integer);
传递。
在第一次进入DoSort之前初始化您的数据。
示例:
procedure Main;
var
data : array[0..24] of Integer;
begin
PopulateData(data);
while jobNotDone do
begin
DoSort(data);
...
end;
end;
答案 1 :(得分:-1)
自从我写了任何Pascal以来,已经有很多个月。但是,在其他语言中,我会创建一个单例(Java,C ++等),基本上可以创建构造函数PRIVATE,因此您只能通过调用创建单个实例。
由于它是作业,我不会给你完整的答案,但下面的链接应该让你开始走上一条好路。
http://wiki.freepascal.org/Singleton_Pattern#Simple_Singleton
祝你好运,希望你能回复细节。