获取IndexOutOfRangeException

时间:2015-10-31 12:12:03

标签: c# arrays visual-studio exception indexoutofrangeexception

我正在尝试在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吗?

抱歉英文不好

0 个答案:

没有答案