2014-07-09 62 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.