语言R:变量不';在一个';对于()和#x27;周期

语言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”的值,但在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 ):");}
}

这个变量实际上变化太大了,因为每次迭代都要测试所有的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”。您的值在循环中不断变化,但您总是将其更改回相同的值。你的逻辑似乎有点不对劲。见鬼,就是这样。谢谢,伙计,我很感激。