2014-07-09 61 views
0

这是我第一次在ABAP。ABAP - 乘法代码错误


DATA: n(1) TYPE I VALUE '2', 
     sum(2) TYPE I. 

DEFINE multiple. 
    WHILE sy-index < 10. 
    sum = &1 * sy-index. 
    WRITE:/&1, 'x', sy-index, sum. 
    ENDWHILE. 
END-OF-DEFINITION. 

DO 9 TIMES. 
    IF sy-index = 1. 
    CONTINUE. 
    ENDIF. 

    multiple sy-index. 
ENDDO. 

所以,通过我的程序所产生的输出的下方。

1 x 1 1 
2 x 2 4 
3 x 3 9 

的实际结果是不是我期待的。


预期的结果应该是...

2 x 1 2 
2 x 2 4 
2 x 3 6 
2 x 4 8 
2 x 5 10 

.. 
.. 
.. 
+0

什么是sy-index? – LeppyR64

+0

http://www.saphub.com/abap-tutorial/loops/ 告诉这个网站...'sy-index是一个系统变量。' – bat

+0

我不确定'abap'中有什么'&1'。你为什么不把sy-index与你声明的变量'n'相乘? –

回答

1

首先,请不要在全局变量的形式,宏内部操作,方法或功能模块。将其作为参数传递。

其次,下面是解决您的问题的一些方法。

我还将multiple功能作为宏留下,但它应该至少作为FORM实施。

DATA: sum(2) TYPE i. 
DATA: l_outer_loop_index TYPE i. 

DEFINE multiple. 
    sum = &1 * &2. 
    WRITE:/&1, 'x', &2, sum. 
END-OF-DEFINITION. 

DO 9 TIMES. 
    IF sy-index = 1. 
    CONTINUE. 
    ENDIF. 
    l_outer_loop_index = sy-index. 
    DO 9 TIMES. 
    multiple l_outer_loop_index sy-index. 
    ENDDO. 
ENDDO. 
+0

谢谢。我学到了很多。 – bat

-1

TRY我的解决方案

DATA: n(1) TYPE i VALUE '2', 
     sum(2) TYPE i. 


DO 9 TIMES. 
    IF sy-index = 1. 
    CONTINUE. 
    ENDIF. 

    PERFORM multi using sy-index. 
ENDDO. 

FORM multi USING i_num TYPE i. 
    DATA: lv_num TYPE i. 

    MOVE i_num TO lv_num. 
    DO 10 TIMES. 
     IF sy-index = 1. 
     CONTINUE. 
     ENDIF. 
    sum = lv_num * sy-index. 

    WRITE:/lv_num, 'x', sy-index, sum. 

    ENDDO. 
ENDFORM. 
+0

谢谢你的回答。我帮了很多。 “感谢” – bat

0

谢谢Jagger,我参考他的回答。我有一个垃圾改变。这是我的第一个答案,我希望这可以帮助你。

DATA: sum(2) TYPE i. 
DATA: sumstring(2) TYPE c. 
DATA: l_outer_loop_index TYPE i. 
DATA: result(100) TYPE c. 
DATA: num1(10) TYPE c, 
     num2(10) TYPE c. 
DEFINE multiple. 
    clear: result. 
    sum = &1 * &2. 
    WRITE &1 to num1. 
    WRITE &2 to num2. 
    WRITE sum to sumstring. 
    CONDENSE sumstring. 
    CONDENSE num1. 
    CONDENSE num2. 
    concatenate num1 'x' num2 '=' sumstring INTO result SEPARATED BY space. 
    WRITE:/result. 
END-OF-DEFINITION. 
DO 9 TIMES. 
    IF sy-index = 1. 
    CONTINUE. 
    ENDIF. 
    l_outer_loop_index = sy-index. 
    DO l_outer_loop_index TIMES. 
    multiple l_outer_loop_index sy-index. 
    IF l_outer_loop_index = sy-index. 
     WRITE:/. 
    ENDIF. 
    ENDDO. 
ENDDO.