如何修复具有多个返回错误的条件的while循环

Posted

技术标签:

【中文标题】如何修复具有多个返回错误的条件的while循环【英文标题】:How to fix a while loop with multiple conditions returning an error 【发布时间】:2013-04-04 04:32:28 【问题描述】:

我编写了代码,要求用户输入“2012”或“2013”​​。然后我有一个while 循环检查,看看用户输入的是 2012 还是 2013。

输入有效年份的请求应该一直持续到用户输入有效数字为止。但是,我不断收到一个错误,即发生意外的“”。我找不到为什么会在我的代码中产生这样的错误。

代码如下:

yr_function <-function()
   year_of_data <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))


year_of_data = 0
While((year_of_data != 2012) | (year_of_data != 2013))
    yr_function
if(year_of_data != (2012 | 2013),print("You must type either 2012 or 2013")

有错误生成读取:

Error: unexpected '' in "While((year_of_data != 2012) | (year_of_data != 2013))"

任何帮助将不胜感激。

【问题讨论】:

您的代码中填充了不正确的 R 代码,例如year_of_data != (2012 | 2013)if(), print()。还要计算你的左括号和右括号。不要听起来刻薄,但我建议您阅读一些 R 教程以了解正确的 R 语法是什么。 我可以帮助调试,但是这段代码看起来只是 R 代码,而实际上它不是正确的 R 代码。 我知道你们俩都是相当敏感的人,所以我希望我没有用一个问题伤害你的感情。具体来说,我觉得代码是正确的,特别是基于我在 R 中阅读的书籍。显然不是,所以我的误解是与问题中的 while 构造有关。为什么会在这里出错?因为就我的 if 而言,我可以在 if(condition, resultant) 中得到条件的结果,或者我可以写 if(condition)resultant。我确实明白,也许条件在 if 条件中写得不好。 恕我直言,这个问题得到的回应与它的质量不成比例,在游说让它不被删除后,我刚刚写了一个相当冗长的答案,当第 5 次接近投票时。我将不胜感激一些重新开放的投票。谢谢! 【参考方案1】:

您已经大致了解了这里的总体思路,但是您在几个地方都被简单的错误绊倒了。这是一个按照您的描述工作的带注释的版本:

yr_function <-function()
   res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
   if (is.na(res))
    res <- -1
   
   res

您的第一个问题与范围有关。您在此函数内和 while 循环之前定义了 year_of_data。但是在函数内部创建的变量不会引用while 循环之前的变量。它们存在于不同的环境中。所以我修改了这个函数,改为 return 用户输入的值。

您没有过多地讨论验证,这是一个很大的话题。我在这里添加了一个非常小的验证。基本上,如果用户输入的东西不能被合理地强制转换为数字,那么你会得到一个 NA 值,这将是一个令人头疼的问题。所以我只是检查它并在这种情况下返回 -1。这不是验证问题的完整解决方案。

year_of_data <- 0
while((year_of_data != 2012) & (year_of_data != 2013))
    year_of_data <- yr_function()
    if (!year_of_data %in% c(2012,2013))
        print("You must type either 2012 or 2013")
    else
        break
    

这是固定的while 循环。首先,我修复了一些简单的语法错误(它是 while 而不是 While 等)。然后我将yr_function() 的结果分配给year_of_data,这样我们就可以检查结果值并采取相应措施。

您对 if 条件 (year_of_data != (2012 | 2013)) 的尝试在语法上不正确,因此我转而检查该值是否包含在向量 c(2012,2013) 中。

最后,if 后面是逗号,然后是 print 语句。逗号是另一个语法错误。因此,我在print 语句周围添加了大括号,并添加了一个else 子句,如果用户输入正确,则该子句会跳出while 循环。

更一般地说,您可能希望针对此类任务调查函数 menu。它可能会使验证问题更容易处理。

【讨论】:

+1 以获得精心设计的答案,并花时间帮助别人。 谢谢乔兰。我真的很感谢你这样做。这很有帮助,可以帮助我稍微看下路。

以上是关于如何修复具有多个返回错误的条件的while循环的主要内容,如果未能解决你的问题,请参考以下文章

具有多个条件的C#中的while循环

如何选用forwhiledo while循环

在 C++ 中满足某些条件(如果)后,如何重新启动 while 循环? [关闭]

Bash脚本,while循环中的多个条件

具有多个条件的 SQL 查询不起作用

第六篇:循环语句 - while和for