ABAP 循环

和大部分语言一样,ABAP也有WHILE循环和DO循环,也都有循环的嵌套和终止。

一、WHILE循环

ABAP的WHILE循环的结束是通过条件判断进行控制的。

WHILE 条件.
    循环体.
ENDWHILE.

举个例子,条件是cnt<20,中间为了输出格式美观增加了条件控制。

*WHILE循环 通过条件控制次数,注意死循环*
DATA cnt TYPE I.
WRITE 'This is WHILE loop'.
WHILE cnt < 20.
  IF cnt = 10 OR cnt = 0.
    SKIP.
  ENDIF.
  WRITE cnt.
  cnt = cnt + 1.
ENDWHILE.

此段代码输出结果显示:

  二、DO循环

ABAP的DO循环可以直接控制循环次数,而不需要条件判断。

DO n TIMES."n为循环的次数
  循环体
ENDDO.

 举个例子,循环次数是10次,中间为了输出格式美观增加了条件控制。

*DO循环  直接限制次数,不需要通过条件控制*
DATA cnt TYPE i.
WRITE 'This is DO loop'.
DO 10 TIMES.
  IF cnt = 5 or cnt = 0.
    SKIP.
  ENDIF.
  WRITE cnt.
  cnt = cnt + 1.
ENDDO.

 此段代码输出结果显示:

三、循环的嵌套

这里仅举例WHILE循环嵌套WHILE循环,DO循环嵌套DO循环,两者结合直接将外循环的循环体复制过去就行。 

1、WHILE循环嵌套

这里的输出字符串中有',需要转义的时候转义字符也是'。

DATA outer TYPE I VALUE 5.
DATA inner TYPE I VALUE 3.
WRITE 'This is WHILE loop'.ULINE.
WHILE outer > 0.
  WRITE :'This is floor',outer,'and it''s inner'."句子中有'转义字符也为'
  WHILE inner > 0.
    WRITE inner.
    inner = inner - 1.
  ENDWHILE.
  inner = 3.
  ULINE.
  outer = outer - 1.
ENDWHILE.

 此段代码输出结果显示:

二、DO循环嵌套 

DATA outer TYPE i VALUE 5.
DATA inner TYPE i VALUE 3.
WRITE 'This is DO loop'.ULINE.
DO 5 TIMES.
  WRITE :'This is floor',outer,'and it''s inner'.
  DO 3 TIMES.
    WRITE inner.
    inner = inner - 1.
  ENDDO.
  outer = outer - 1.
  inner = 3.
  ULINE.
ENDDO.

  此段代码输出结果显示:

这里两端代码都比较好理解,就不做过多解释。 

四、跳出循环

代码中使用的系统变量SY-INDEX表示当前循环的次数。

1、CONTINUE,使用CONTINUE时,满足条件的时候只会结束本次循环,后面的语句不会执行,但是整个循环不会结束。

DO 10 TIMES.
  IF sy-index = 5.
    CONTINUE."满足条件的时候,结束本次循环并且继续下一次循环,后面的语句不会执行
  ENDIF.
  WRITE : / 'This is',sy-index,'time'.
ENDDO.

   此段代码输出结果显示:

2、EXIT,使用EXIT时,满足条件的时候就会结束整个循环并且后面的语句不会执行。

DO 10 TIMES.
  IF sy-index = 6.
    EXIT."后面的语句不会执行,并且直接结束整个循环
  ENDIF.
  WRITE : / 'This is',sy-index,'time'.
ENDDO.

    此段代码输出结果显示:

3、CHECK,使用CHECK时进行条件判断,符合条件的才会继续执行后面语句,不满足的不执行,不会结束整个循环,可以用IF条件判断进行改写。 CHECK可在循环之外的地方使用。

DO 10 TIMES.
  CHECK sy-index = 7."满足CHECK的条件才会执行后面的语句,有条件的执行后面的语句,可用IF改写
  "IF sy-index = 7.
  "  WRITE : / 'This is',sy-index,'time'.
  "ENDIF.
  WRITE : / 'This is',sy-index,'time'.
ENDDO.

   此段代码输出结果显示: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值