Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1267216
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-04-22 11:00:58



最近老师要求我们模拟页面置换的先进先出,在进行页面置换的时候,我希望先对页面名称进行比较,一样的话,就没必要进行置换.  
   
  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,试过也不行,也用过(<>),和另外一个函数,但是都没用,感觉好像没进行比较这一步....???     请问大家这是怎么回事,多谢!!!!

//你的代码风格太差,难道你们老师就没说过你?  
  //你照着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;  
 

for   h:=1   to   listbox1.ItemIndex   do    
   
  -----------------------------------  
   
  你的问题是程序没有执行h作为新进页面与已有页面的比较的控制循环变量,而Flag的初始值为True,为什么没有执行呢,你把循环按下面改一下就可以了.  
   
  for   h:=0   to   pred(listbox1.Items.count)   do

谢谢你们   照你们的改后,程序可以达到我预期的效果了   zswang   :关于代码风格的问题,我以后会注意的   你的代码很精简,从中我也看出了我的问题.但是在循环控制的那个部分也要照sanmaotuo的改       呵呵,经过你们俩的指导,我学到了东西,谢谢



--------------------------
新闻:大脑推客:通过电脑思考即可发布Twitter消息
网站导航: 博客园首页  新闻  .NET频道  社区  博问  闪存  找找看
阅读(408) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~