语言R:变量在'for()'周期内不会改变吗?

时间:2019-05-22 05:05:51

标签: r variables error-handling

我正在尝试分析“ edoActual”的值,但是似乎在for循环后它的值没有改变。

在RGui中运行它时,它不会指出任何错误或警告。在RStudio上运行时,它会发疯。无论哪种方式,它都不起作用。

edoActual = "q0";
print("Input cadena: ");
cadena <- scan("", what="char");

for(i in 1:length(cadena)) {
  if( edoActual == "q0" && cadena[i] == "a" ) {
    edoActual = "q1";
  }
  if( edoActual == "q0" && cadena[i] == "b" ) { 
    edoActual = "q0";
  }
  if( edoActual == "q1" && cadena[i] == "a" ) {
    edoActual = "q0";
  }
  if( edoActual == "q1" && cadena[i] == "b" ) {
    edoActual = "q1";
  }
  if( cadena[i] != "a" && cadena[i] != "b") {
    print("Error: invalid.");
    break;
  }  
}

if( i == length(cadena) ) {
  if(edoActual == "q1") {print("accepted (:");}
  if(edoActual == "q0") {print("rejected ):");}
}

应该发生什么:

[1] "Input cadena: "
1: a
2: a
3: b
4: a
5:
Read 4 ítems

[1] "accepted (:" 

1 个答案:

答案 0 :(得分:2)

该变量实际上变化太大,因为您每次迭代都要测试所有的if语句。

因此,每次cadena [i] =='a'时,第一个if将edoActual分配给'q1',然后当它到达第3个时再次分配给'q0'。

我认为您真正想要的只是测试第一个有效的if语句。因此,当edoActual更改其值时,它将继续进行下一个迭代。您可以使用else进行此操作,这保证只有在前一个测试为False时,您才可以进行下一个测试。

edoActual = "q0";
print("Input cadena: ");
cadena <- scan("", what="char");

for(i in 1:length(cadena)) {
  if( edoActual == "q0" && cadena[i] == "a" ) {
    edoActual = "q1";
  } else if( edoActual == "q0" && cadena[i] == "b" ) { 
    edoActual = "q0";
  } else  if( edoActual == "q1" && cadena[i] == "a" ) {
    edoActual = "q0";
  } else  if( edoActual == "q1" && cadena[i] == "b" ) {
    edoActual = "q1";
  } else if( cadena[i] != "a" && cadena[i] != "b") {
    print("Error: invalid.");
    break;
  }  
}

if( i == length(cadena) ) {
  if(edoActual == "q1") {print("accepted (:");}
  if(edoActual == "q0") {print("rejected ):");}
}