最近老师要求我们模拟页面置换的先进先出,在进行页面置换的时候,我希望先对页面名称进行比较,一样的话,就没必要进行置换.procedure TForm1.Button3Click(Sender: TObject);
var h,m:integer; flag:boolean;
begin flag:=true;
for h:=1 to listbox1.ItemIndex do
// h作为新进页面与已有页面的比较的控制循环变量
begin
if sametext(edit2.Text,listbox1.Items[h])then
begin
flag:=false; // 物理块中存在与新进页面一样的页面
end
else
begin
flag:=true;//新进页面在物理块中没有
end;
end;
if flag=false then
begin
showmessage('页面已存在,不需要置换');
edit2.Clear;
edit2.SetFocus;
end
else
begin //根据fifo算法 进行替换
m:=i mod strtoint(edit1.Text);
listbox1.Items[m]:=edit2.Text;
edit2.Clear;
edit2.SetFocus;
i:=i+1;
end;
end;但是无论我输入什么变量,他会进行置换,不管是不是存在相同的页面,然而我也怀疑是sametext相同的话,返回的值是false,试过也不行,也用过(<>),和另外一个函数,但是都没用,感觉好像没进行比较这一步....??? 请问大家这是怎么回事,多谢!!!!
var h,m:integer; flag:boolean;
begin flag:=true;
for h:=1 to listbox1.ItemIndex do
// h作为新进页面与已有页面的比较的控制循环变量
begin
if sametext(edit2.Text,listbox1.Items[h])then
begin
flag:=false; // 物理块中存在与新进页面一样的页面
end
else
begin
flag:=true;//新进页面在物理块中没有
end;
end;
if flag=false then
begin
showmessage('页面已存在,不需要置换');
edit2.Clear;
edit2.SetFocus;
end
else
begin //根据fifo算法 进行替换
m:=i mod strtoint(edit1.Text);
listbox1.Items[m]:=edit2.Text;
edit2.Clear;
edit2.SetFocus;
i:=i+1;
end;
end;但是无论我输入什么变量,他会进行置换,不管是不是存在相同的页面,然而我也怀疑是sametext相同的话,返回的值是false,试过也不行,也用过(<>),和另外一个函数,但是都没用,感觉好像没进行比较这一步....??? 请问大家这是怎么回事,多谢!!!!
//你照着VCL里的代码风格编写
//这个问题关键是在循环中赋值又没有退出循环,那当然flag值就是最后一条判断出来的值
//参考如下代码: flag := True;
for h := 0 to Listbox1.ItemIndex do
// h作为新进页面与已有页面的比较的控制循环变量
begin
if SameText(Edit2.Text, Listbox1.Items[h])then
begin
flag := False; // 物理块中存在与新进页面一样的页面
Break; // <<<<<<<<<<<<<<<<<退出循环
end;
end;