C# でチューリング マシンを実装しようとしています。単語をチャート配列に変換し、配列を操作します。
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
?
下手な英語でごめんなさい