循环,而类中的public void为false

问题描述 投票:0回答:1

我试图找出正确的语法来循环正确的用户输入,同时类返回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文件,它在点击Button时接受用户输入,并将FILL-IN:SCREEN-VALUE分配给一个变量,然后将其传递给类中的方法。

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需要传递给方法。这就是我被卡住的地方。

我需要程序循环并不断要求用户输入正确的字符串,而方法是假的,但我似乎无法找出正确的语法,或者我是否走错了思路。

我的想法是,我可以使用DO WHILE来继续循环,并用一个计数器来终止。

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

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

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

progress openedge progress-4gl
1个回答
3
投票

你的类方法需要返回一个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即可。

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