【问题标题】:trouble with 'breaks' in for loops in RR中for循环的“中断”问题
【发布时间】:2020-02-03 19:57:24
【问题描述】:

我正在为一门分析编程课程编写语言,该课程要求我检查向量中的重复元素。虽然我能够编写逻辑代码,但我试图在代码中使用“中断”,这样一旦我找到重复项,它就不会贯穿其余元素。在我的代码中,我能够跳出“while 循环”,但不能跳出“for 循环”。我可以使用有关如何添加第二个中断的建议,以便计数器在下面的 3 处停止,并且不会跳回 for 循环。

x <- c(3, -7, 6, 3, 1, -7)
n <- length(x); n # = 6
counter <- 0
answer <- FALSE
for (i in 1:(n-1)) {
    v <- i + 1
    while (v <= n) {
      counter <- counter + 1
      if (x[i] == x[v]) {
        answer <- TRUE
        break
      }
      else {
        v <- v + 1
      }
    }
}
answer # = TRUE
counter # = 13, SHOULD BE 3

我希望在 3 个循环处停止,但是我在括号后添加的中断没有起作用,所以我只是在 while 循环中成功添加了中断,但它仍在遍历剩余的元素。

【问题讨论】:

    标签: r for-loop while-loop


    【解决方案1】:

    因为如果while 循环没有被破坏,answer 不能为真,所以将answer 值检查放在while 循环之后,如果for 循环为真,则打破for 循环:

    x <- c(3, -7, 6, 3, 1, -7)
    n <- length(x); n # = 6
    counter <- 0
    answer <- FALSE
    for (i in 1:(n-1)) {
        v <- i + 1
        while (v <= n) {
          counter <- counter + 1
          if (x[i] == x[v]) {
            answer <- TRUE
            break
          }
          else {
            v <- v + 1
          }
    
        } #end while
    
        if(answer == TRUE)         
           break
    
    } #end for
    answer # = TRUE
    counter # = 13, SHOULD BE 3
    

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 2018-11-02
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2015-01-19
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多