语言R:变量不';在一个';对于()和#x27;周期
我试图分析“edoActual”的值,但在for循环之后,它的值似乎没有改变 在RGui中运行时,它不会指向任何错误或警告。在RStudio上运行时,它会发疯。不管怎样都不行语言R:变量不';在一个';对于()和#x27;周期,r,variables,error-handling,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 = "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 ):");}
}
这个变量实际上变化太大了,因为每次迭代都要测试所有的if语句 因此,每次cadena[i]='a'第一个if将'q1'分配给edoActual,然后当它到达第三个if时,如果它再次变为'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 ):");}
}
edoActual=“q0”;
打印(“输入cadena:”);
cadena变量实际上变化太大,因为每次迭代都要测试所有if语句
因此,每次cadena[i]='a'第一个if将'q1'分配给edoActual,然后当它到达第三个if时,如果它再次变为'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 ):");}
}
edoActual=“q0”;
打印(“输入cadena:”);
卡德娜,你的意思是在那里有其他的/如果的陈述吗?因为在第一个循环edoartual==“q0”
和cadena[1]==“a”
中,您将更改为“q1”,但随后的两个if现在edoartual==“q1”
但仍然cadena[1]==“a”
因此您最终将其更改回“q0”。您的值在循环中不断变化,但您总是将其更改回相同的值。你的逻辑似乎有点不对劲。见鬼,就是这样。谢谢,伙计,我很感激。你是不是想在里面放其他的/if语句?因为在第一个循环edoartual==“q0”
和cadena[1]==“a”
中,您将更改为“q1”,但随后的两个if现在edoartual==“q1”
但仍然cadena[1]==“a”
因此您最终将其更改回“q0”。您的值在循环中不断变化,但您总是将其更改回相同的值。你的逻辑似乎有点不对劲。见鬼,就是这样。谢谢,伙计,我很感激。