我正在尝试分析“ 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 (:"
答案 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 ):");}
}