我正在尝试在C#上实现图灵机。我将word转换为图表数组并使用数组。
public TuringMachine(String word) {
word = " " + word + " ";
tapeArray = word.ToCharArray();
}
我必须检测以数字1结尾的行/字符串/单词。
所以如果我输入1010100101
,我就会得到这个
>1
>Word ends in 1
但如果我输入10101010
,我会IndexOutOfRangeException
。
这里有完整的代码:
public class TuringMachine {
char[] tapeArray;
int N;
char a0 = ' ';
int i = 1;
public TuringMachine(String word) {
word = " " + word + " ";
tapeArray = word.ToCharArray();
N = tapeArray.Length;
State1();
}
public void State1() {
if (tapeArray[i] == '1') {
tapeArray[i] = '1';
i = i + 1;
State1();
}
if(tapeArray[i] == '0') {
tapeArray[i] = '0';
i = i + 1;
State1();
}
if (tapeArray[i] == a0) {
tapeArray[i] = a0;
i = i - 1;
State2();
}
}
public void State2() {
if (tapeArray[i] == '1') {
tapeArray[i] = a0;
i = i - 1;
State3();
}
if (tapeArray[i] == '0') {
tapeArray[i] = a0;
i = i - 1;
State4();
}
}
public void State3() {
if (tapeArray[i] == '1') {
tapeArray[i] = a0;
i = i - 1;
State3();
}
if (tapeArray[i] == '0') {
tapeArray[i] = a0;
i = i - 1;
State3();
}
if (tapeArray[i] == a0) {
tapeArray[i] = '1';
}
}
public void State4() {
if (tapeArray[i] == '1') {
tapeArray[i] = a0;
i = i - 1;
State4();
}
if (tapeArray[i] == '0') {
tapeArray[i] = a0;
i = i - 1;
State4();
}
if (tapeArray[i] == a0) {
tapeArray[i] = '0';
i = 1;
}
}
}
有人可以解释为什么我会IndexOutOfRangeException
吗?
抱歉英文不好