谷歌应用程序脚本循环与消息框

时间:2017-11-02 16:35:42

标签: google-apps-script

我正在开发一个涉及用户输入的项目。我正在检查所提供的答案是否等于答案。我希望他们继续回答,直到他们得到正确的答案。我没有使用一堆if语句,而是想使用循环。我已经尝试了几个循环,但所有循环都会无限期地继续下去。以下是我尝试的程序(我没有尝试 for 循环,因为它似乎不适用)。

function answer(){
    var input = Browser.inputBox('Please submit your answer');
    while(input != 1){
    input = Browser.inputBox('your answer was incorect, please try again');
    }
Browser.msgBox('good job you got the right answer!')
}

我也试过

function answer(){
    var input = Browser.inputBox('Please submit your answer');
    do{
    input = Browser.inputBox('your answer was incorect, please try again');
    }while(input != 1);
Browser.msgBox('good job you got the right answer!')
}

我知道循环会让他们提交两个答案,但我只是在尝试。任何帮助将不胜感激。

**在简化中我删除了问题所以这里是我遇到问题的代码。

function answer(){
    var input = Browser.inputBox('Please submit your answer');
    var range1 = SpreadsheetApp.getActiveSpreadsheet.getSheetByName(sheet1).getRange('A1');
    var range2 = SpreadsheetApp.getActiveSpreadsheet.getSheetByName(sheet1).getRange('B1');
    range1.setValue(input);
    var answer = range2.getValue();

    while(answer != 'correct'){
        input = Browser.inputBox('your answer was incorect, please try again');
        range1 = SpreadsheetApp.getActiveSpreadsheet.getSheetByName(sheet1).getRange('A1');
        range2 = SpreadsheetApp.getActiveSpreadsheet.getSheetByName(sheet1).getRange('B1');
        range1.setValue(input);
        answer = range2.getValue();
    }

    Browser.msgBox('good job you got the right answer!')
}

此代码指的是进行计算的电子表格,这些计算似乎会抛弃循环并导致它们进入无限循环。在B1中,我根据A1中的内容运行计算并显示正确或不正确。我跑了,等了。大约5-10分钟后,我的脚本给了我超时等待用户响应(第2行,文件"代码")错误。我一直看着电子表格,它从来没有给我一个输入框。

1 个答案:

答案 0 :(得分:1)

除非您希望B2发生变化,否则没有理由反复执行getRange('B1').getValue(),但这不是问题,只是一些优化。

现在问你的问题。这是代码逻辑中的一个缺陷

while(answer != 'correct')
您的脚本answer中的

B2中的值,但是您不会使用输入更改此值,因此如果B2值为correct,则它将始终运行一次但是,如果B2 correct,那么它将无限循环。

修改 我把代码改成了一些我认为你希望它做一些优化的代码。删除了不必要的getRange().getSheet重复

function answer(){
  var objSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  var objUi = SpreadsheetApp.getUi();
  var input = objUi.prompt('Please submit your answer').getResponseText();

  var range1 = objSheet.getRange('A1');
  var range2 = objSheet.getRange('B1');  

  range1.setValue(input);
  var answer = range2.getValue();

  while (input != answer){
    input = objUi.prompt('Your answer was incorect, please try again').getResponseText();
    range1.setValue(input);
  }

  objUi.alert('good job you got the right answer!')
}