循环 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。
我正在尝试找出正确的语法来循环以获取正确的用户输入,而 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。