子程序调用的参数 "n-1" 给出语法错误
Argument "n-1" of subroutine call gives a syntax error
我想在 ABAP 中编写汉诺塔求解器。
这是我当前的代码:
FORM SOLVE USING s1 TYPE c
s2 TYPE c
s3 TYPE c
n TYPE i.
IF n = 1.
"move disc from tower X to tower Y"
WRITE:/ text-001, text-002, s1, text-003, text-002, s3.
ELSE.
PERFORM solve USING s1 s3 s2 n-1. "Here's my problem, n-1 doesn't work"
PERFORM solve USING s1 s2 s3 1.
PERFORM solve USING s2 s1 s3 n-1.
ENDIF.
ENDFORM.
我的问题:
如果我选择 USING
参数,如 n-1
,SAP 将其识别为(不存在的)结构并向我抛出错误。
有什么方法可以做到这一点吗?
非常感谢。
您需要在运算符之间添加space。所以你需要输入 n - 1
。另一方面,旧版本 ABAP 不支持内联操作数作为 function/perform 参数。如果出现错误,首先将结果分配给新变量,然后将其作为参数传递。
这是我的解决方案。它工作得很好。感谢大家提供有用的提示。
*&---------------------------------------------------------------------*
*& Report ZS_SANDBOX_TOH
*&
*&---------------------------------------------------------------------*
*&
*& Datum: 19.09.2018
*& Beschreibung: Lösungsprogramm für das Türme von Hanoi - Problem
*&---------------------------------------------------------------------*
REPORT ZS_SANDBOX_TOH.
PARAMETERS: p_discs TYPE i.
CLASS myclass DEFINITION.
PUBLIC SECTION.
CLASS-METHODS solve IMPORTING s1 TYPE c
s2 TYPE c
s3 TYPE c
n1 TYPE i.
ENDCLASS.
CLASS myclass IMPLEMENTATION.
METHOD solve.
IF n1 = 1.
WRITE:/ 'Lege Scheibe von Turm ', s1, ' auf Turm ', s3.
ELSE.
solve( s1 = s1
s2 = s3
s3 = s2
n1 = n1 - 1 ).
solve( s1 = s1
s2 = s2
s3 = s3
n1 = 1 ).
solve( s1 = s2
s2 = s1
s3 = s3
n1 = n1 - 1 ).
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CALL METHOD myclass=>solve( s1 = 'A'
s2 = 'B'
s3 = 'C'
n1 = p_discs ).
我想在 ABAP 中编写汉诺塔求解器。
这是我当前的代码:
FORM SOLVE USING s1 TYPE c
s2 TYPE c
s3 TYPE c
n TYPE i.
IF n = 1.
"move disc from tower X to tower Y"
WRITE:/ text-001, text-002, s1, text-003, text-002, s3.
ELSE.
PERFORM solve USING s1 s3 s2 n-1. "Here's my problem, n-1 doesn't work"
PERFORM solve USING s1 s2 s3 1.
PERFORM solve USING s2 s1 s3 n-1.
ENDIF.
ENDFORM.
我的问题:
如果我选择 USING
参数,如 n-1
,SAP 将其识别为(不存在的)结构并向我抛出错误。
有什么方法可以做到这一点吗?
非常感谢。
您需要在运算符之间添加space。所以你需要输入 n - 1
。另一方面,旧版本 ABAP 不支持内联操作数作为 function/perform 参数。如果出现错误,首先将结果分配给新变量,然后将其作为参数传递。
这是我的解决方案。它工作得很好。感谢大家提供有用的提示。
*&---------------------------------------------------------------------*
*& Report ZS_SANDBOX_TOH
*&
*&---------------------------------------------------------------------*
*&
*& Datum: 19.09.2018
*& Beschreibung: Lösungsprogramm für das Türme von Hanoi - Problem
*&---------------------------------------------------------------------*
REPORT ZS_SANDBOX_TOH.
PARAMETERS: p_discs TYPE i.
CLASS myclass DEFINITION.
PUBLIC SECTION.
CLASS-METHODS solve IMPORTING s1 TYPE c
s2 TYPE c
s3 TYPE c
n1 TYPE i.
ENDCLASS.
CLASS myclass IMPLEMENTATION.
METHOD solve.
IF n1 = 1.
WRITE:/ 'Lege Scheibe von Turm ', s1, ' auf Turm ', s3.
ELSE.
solve( s1 = s1
s2 = s3
s3 = s2
n1 = n1 - 1 ).
solve( s1 = s1
s2 = s2
s3 = s3
n1 = 1 ).
solve( s1 = s2
s2 = s1
s3 = s3
n1 = n1 - 1 ).
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CALL METHOD myclass=>solve( s1 = 'A'
s2 = 'B'
s3 = 'C'
n1 = p_discs ).