SAS中文论坛

标题: method中的do循环问题! [打印本页]

作者: shiyiming    时间: 2003-12-4 23:23
标题: method中的do循环问题!
在一个class的method中使用do循环(形如 do i=1 to 100),运行时总是出现死循环的现象,程序毫无问题,在frame的scl中运行完全正常。如果将上述循环形式改为 do while(i<=100) 的形式,功能又能正常执行。

不知是什么缘故?难道class中不能存在针对其属性(i 须是class的某个属性方能如此使用)的do循环(形如 do i=1 to 100 的形式)吗?但为何do wile(i<=100)的形式可以正常运行呢?请各位不吝赐教。谢谢!
作者: shiyiming    时间: 2003-12-5 09:34
i只能算是一个method的局部变量,不能算这个class的attribute。

我觉得一般不能出现这种问题,可能不是do...end的问题,而是其他的一些问题。
作者: shiyiming    时间: 2003-12-5 11:24
在class的method中使用的所有变量必须是class的属性或method的参数,我曾试过违反此规则的操作,系统信息提示我应遵守上述规则。因此do循环中使用的循环变量我也设为class的属性之一,这样就出现了上述的问题。

具体问题就是循环变量增加到一定数值时就无法再自动增加(在我的程序中总是停留在i=2上),从而永远无法跳出循环。

还请各位高手指点。
作者: shiyiming    时间: 2003-12-5 11:26
无论i是method内部的局部变量,还是class的attribute,我也觉得不太可能出现这种情况,多数还是你程序逻辑问题。
建议没有必要把i这种只用于循环的变量设成attribute,因为变成全局的就可能发生被其他method修改的可能了。

你有没有在method中
dcl num i;

实在有问题,做个小demo,发给大家研究一下。
作者: shiyiming    时间: 2003-12-5 14:56
[quote="shiyiming":67f93]无论i是method内部的局部变量,还是class的attribute,我也觉得不太可能出现这种情况,多数还是你程序逻辑问题。
建议没有必要把i这种只用于循环的变量设成attribute,因为变成全局的就可能发生被其他method修改的可能了。

你有没有在method中
dcl num i;[/quote:67f93]

但为什么改为do while(i<=n) 后能正常运行?我的程序逻辑应当没有问题,检查了好多遍。

我没有在method中使用dcl num i;而是在class中使用 private num i;
是不是这样导致的问题?我改成前一个形式试一试。

谢谢shiyiming兄的指点!
作者: shiyiming    时间: 2003-12-5 15:56
这可能还是你那边的问题。
我试了一下:
我定义个一个class名称为d,有个private的num:i
并新建以一个method:willon
/* WILLON */                  
WILLON: public method  return=num;
    dcl num result;            
    result=0;                  
    do i=1 to 10;              
       result=result+i;        
    end;                       
    return result;            
endmethod;

然后调用这个class运行,一点问题都没有,结果显示正常。

init:     
   dcl num result;   
   import work.new.d.class;      
   dcl d d=_new_ d();            
   result=d.willon();            
   d._term();        
   put result;      
return;
作者: shiyiming    时间: 2003-12-5 19:57
试了试你的程序,没有任何问题。看来还是我的程序存在问题,我好好检查一下。

谢谢willon!




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2