SAP Abap 代码无法工作 |字段“CHECK_PRIME”未知。 |方法“CHECK_PRIME”未在类“ZCL_NTH_PRIME”中声明或继承。 | [已关闭]

问题描述 投票:0回答:1
REPORT Z_PRIMENUMBER.

CLASS ZCL_NTH_PRIME DEFINITION FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    METHODS prime
      IMPORTING
        input         TYPE i
      RETURNING
        VALUE(result) TYPE i
      RAISING
        cx_parameter_invalid.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS ZCL_NTH_PRIME IMPLEMENTATION.
  METHOD prime.
    IF input = 0.
      RAISE EXCEPTION TYPE cx_parameter_invalid.
    ENDIF.

    DATA prime_number TYPE i.
    DATA prime_count TYPE i.
    prime_number = 2.
    prime_count = 0.

    DO.
      IF check_prime(prime_number) = abap_true.
        prime_count = prime_count + 1.
      ENDIF.

      IF prime_count = input.
        result = prime_number.
        EXIT.
      ENDIF.

      prime_number = prime_number + 1.
    ENDDO.
  ENDMETHOD.

  METHOD check_prime.
    DATA number TYPE i.
    DATA is_prime TYPE abap_bool.
    number = 2.
    is_prime = abap_true.

    DO number = 2 TO sqrt(input).
      IF input MOD number = 0.
        is_prime = abap_false.
        EXIT.
      ENDIF.
    ENDDO.

    result = is_prime.
  ENDMETHOD.
ENDCLASS.

DATA: nth_prime TYPE i,
      result TYPE i.

nth_prime = 10.

DATA: prime_calculator TYPE REF TO ZCL_NTH_PRIME.

CREATE OBJECT prime_calculator.

TRY.
    prime_calculator->prime( nth_prime )->result.
    result = nth_prime.
    WRITE: / 'The', nth_prime, 'th prime number is', result.
CATCH cx_parameter_invalid INTO DATA(exception).
    WRITE: / 'Error:', exception->get_text( ).
ENDTRY.

显示错误:字段“CHECK_PRIME”未知。在这一行(IF check_prime(prime_number) = abap_true。) 另一个错误是:方法“CHECK_PRIME”未在类“ZCL_NTH_PRIME”中声明或继承。在这一行(方法 check_prime。)

我期待这段代码会显示第 n 个数字之后的素数

frontend primes abap
1个回答
0
投票

错误消息

The method "CHECK_PRIME" is not declared or inherited in class "ZCL_NTH_PRIME"
的含义正是如此。您正在尝试实现并调用您未在
CLASS ZCL_NTH_PRIME DEFINITION
和相应的
ENCLASS.
之间声明的方法。

您的类定义中有一个名为

prime
的方法,但没有名为
check_prime
的方法。因此,您需要做的是添加第二个方法的声明。从上下文和您在该方法的实现中使用的未声明的变量猜测,我想说它必须看起来像这样:

METHODS check_prime
  IMPORTING
    input         TYPE i
  RETURNING
    VALUE(result) TYPE abap_bool.

这个定义到底属于哪里?考虑到该方法似乎不是从类外部调用的,因此它不需要位于

PUBLIC SECTION
中。考虑到该类是
FINAL
,所以不可能有任何类继承它。这意味着在
PROTECTED SECTION
中放入任何内容都是没有意义的。所以你应该把它放入
PRIVATE SECTION

© www.soinside.com 2019 - 2024. All rights reserved.