循环 while public void in class is false

Loop while public void in class is false

我正在尝试找出正确的语法来循环以获取正确的用户输入,而 class returns false。

validate.cls file

******DEFINITIONS and other code********

METHOD PUBLIC VOID isEntryCorrect (INPUT userEntry AS CHARACTER):
    DEFINE VARIABLE cLogical as LOGICAL NO-UNDO.
    IF userEntry = "wrong" THEN
        DO:
            cLogical = FALSE.
    END.
    ELSE IF userEntry = "right" THEN 
        DO:
            cLogical = TRUE.
    END.

END METHOD.

有一个 .w 文件在单击按钮时接受用户输入并将 FILL-IN:SCREEN-VALUE 分配给一个变量,然后将其传递给 class 中的方法。

UserInput.w file

****class definition***
DEFINE VAR userInput as validate NO-UNDO.
userInput = NEW validate("").

****local variable definition****
DEF VAR windowInput AS CHARACTER NO-UNDO.
DEF VAR iCount as INTEGER NO_UNDO INITIAL 0.

windowInput = FILL-IN:SCREEN-VALUE.

但是那个 windowInput 需要传递给方法。这就是我卡住的地方。

我需要程序循环并在方法为 false 时不断要求用户输入正确的字符串,但我似乎无法计算出正确的语法,或者我的思路有误。

我的想法是,我可以使用 DO WHILE 来保持循环并使用计数器终止。

****the incorrect code*****
DO WHILE userInput:isEntryCorrect(windowInput) <> TRUE OR iCOunt = 3:

     windowInput = FILL-IN:SCREEN-VALUE.
     iCount = iCount + 1.
END.

如果这真的有效,它可能会一直循环直到数到三,然后继续执行程序的其余部分。

您的 class 方法需要 return 一个 LOGiCAL 值,而不是 VOID:

METHOD PUBLIC LOGICAL isEntryCorrect (INPUT userEntry AS CHARACTER):
    DEFINE VARIABLE cLogical as LOGICAL NO-UNDO.
    IF userEntry = "wrong" THEN
        DO:
            cLogical = FALSE.
    END.
    ELSE IF userEntry = "right" THEN 
        DO:
            cLogical = TRUE.
    END.

    RETURN cLogical . 

END METHOD.

或者只是

METHOD PUBLIC LOGICAL isEntryCorrect (INPUT userEntry AS CHARACTER):
    DEFINE VARIABLE cLogical as LOGICAL NO-UNDO.
    IF userEntry = "wrong" THEN
        RETURN FALSE . 
    ELSE IF userEntry = "right" THEN 
        RETURN TRUE . 

    RETURN ? . 

END METHOD.

您的 DO WHILE 块将正常工作。但是,为了允许用户在迭代之间更改值,您需要一个输入阻塞语句。

非常老套的是:

UPDATE FILL-IN .

PROMPT-FOR FILL-IN . 

如果您的编码风格更多地是事件驱动的(WAIT-FOR 语句),您就不会在 DO WHILE 块中执行此操作。您将在填充的 LEAVE 事件的触发器中执行此操作,只需数到 3。