我想知道如何编写do-while风格的循环。
我找到了这篇帖子:
你可以使用repeat{},并在任何需要使用if()的地方检查条件,并使用“break”控制词退出循环。
我不确定它确切的意思是什么。如果您理解并且有不同的解决方法,请详细说明一下?
我想知道如何编写do-while风格的循环。
我找到了这篇帖子:
你可以使用repeat{},并在任何需要使用if()的地方检查条件,并使用“break”控制词退出循环。
我不确定它确切的意思是什么。如果您理解并且有不同的解决方法,请详细说明一下?
repeat{
statements...
if(condition){
break
}
}
我认为应该是类似于这样。为了获得do while循环的效果,只需在语句组的末尾检查条件。
repeat( { expressions}; if (! end_cond_expr ) {break} )
)。因此,使用repeat !EndCondition
可以模拟do-while EndCondition。我通过代码片段验证了这个事实。 - Erdogan CEVHERcondition
的含义,所以我不会说Salcedo的答案是错误的。但你说得很对,if(!condition){break}
更符合C语言的do{} while(condition)
结构。 - Josiah Yoder请查看?Control
或者R语言定义:
> y=0
> while(y <5){ print( y<-y+1) }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
do_while
在 R 中并不存在作为一个单独的结构,但您可以使用以下方法模拟实现:
repeat( { expressions}; if (! end_cond_expr ) {break} )
如果您想查看帮助页面,您不能在控制台中输入?while
或?repeat
,而是需要使用?'repeat'
或?'while'
。 所有的"控制结构",包括if
都在同一页上,并且所有需要在“?”后引用字符,这样解释器才不会将其视为不完整的代码并给出续行符“+”。y
(第一行和print
调用内部)。为了减少冗余并减少某些情况下出现错误的可能性,使用"do-while"很好,因此您只需赋值给某个变量(例如y
)一次即可。 - Kalindo-while
的意思是:运行此代码块一次。检查条件。如果条件为假,则再次运行此代码块。重复检查条件。while
的意思是:检查条件。运行此代码块。如果条件为假,则再次运行此代码块。重复检查条件。在 do-while
循环中,条件在代码执行后进行检查。在 while
循环中,条件在代码执行前进行检查。在 do-while
循环中,保证至少执行一次代码。在 while
循环中,代码可能永远不会被执行。 - cazgpdo_while
,所以要获得这种行为,需要使用 repeat {expr}
,其中 expr
在末尾有一个测试和一个 break
,或者使用 Henrik 在评论中建议的策略。 - IRTFMrepeat( { expressions}; if (! end_cond_expr ) {break} )
)。因此,使用repeat !EndCondition模拟do-while EndCondition。当我将高斯代码转换为R时,我应用了42的逻辑,并且加上否定符号救了我的命。非常感谢42。 - Erdogan CEVHER在其他答案的基础上,我想分享一个使用while循环结构实现do-while行为的示例。通过在while条件中使用一个简单的布尔变量(初始化为TRUE),然后在if语句中稍后检查我们的实际条件。也可以在if语句中使用break关键字而不是continue <- FALSE(可能更有效率)。
df <- data.frame(X=c(), R=c())
x <- x0
continue <- TRUE
while(continue)
{
xi <- (11 * x) %% 16
df <- rbind(df, data.frame(X=x, R=xi))
x <- xi
if(xi == x0)
{
continue <- FALSE
}
}
do while (condition) # in other language
..statements..
endo
repeat{ # in R
..statements..
if(! condition){ break } # Negation is crucial here!
}
!
或否定条件来取消条件,则代码执行的过程中可能存在扭曲的情况(1. 值持久化 2. 无限循环)。因此,我将通过一个具体的例子强调并突出他的方法。在高斯中: } 没有得到足够的关注。proc(0)=printvalues(y);
DO WHILE y < 5;
y+1;
y=y+1;
ENDO;
ENDP;
printvalues(0); @ run selected code via F4 to get the following @
1.0000000
2.0000000
3.0000000
4.0000000
5.0000000
在R中:
printvalues <- function(y) {
repeat {
y=y+1;
print(y)
if (! (y < 5) ) {break} # Negation is crucial here!
}
}
printvalues(0)
# [1] 1
# [1] 2
# [1] 3
# [1] 4
# [1] 5
!(y<5)
替换他的(condition)
,或者用(y>=5)
或其他你需要的条件来替换它,以满足使用情况。它不一定要有否定符号,只要你需要逻辑条件来停止循环即可。 - matt!(y<5)
= (y>=5)
一样。 - Erdogan CEVHER