制作BrainF * ck口译员,麻烦循环

时间:2014-03-04 12:52:05

标签: java java-ee

以下是我的代码http://pastebin.com/itL26LW6 http://pastebin.com/index/fvx3Tc65

特别是这是应该控制[和]

的部分
 case Token.LEFT:
                    if (tape[datapointer] == 0 ){
                            int i =1;
                            while (i > 0) {
                                    char c2 = (char) c[++charpointer];
                                    if (c2 == Token.LEFT)
                                            i++;
                                    else if (c2 == Token.RIGHT)
                                            i--;   
                            }
                    }
                    break;
            case Token.RIGHT:
                    int i = 1;
                    while ( i > 0 ) {
                            char c2 = (char) c[--charpointer];
                            if (c2 == Token.LEFT)  
                                    i--;
                            else if (c2 == Token.RIGHT)
                                    i++;
                    }
                    charpointer--;
                    break;

            }

}

该程序应该在一个名为file.txt的文件中读取brainf * ck程序。问题是,我测试了hello world,我的程序没有做任何事情。我无法弄清楚上面的代码算法的问题。

1 个答案:

答案 0 :(得分:0)

一个问题是,在[令牌之后,您的charpointer不会增加。

这意味着如果当前datapointer下的值不为零,则您的程序会卡在[符号上,因为++charpointer甚至不执行一次。 如果datapointer指向零,它会跳转到相应的],从而导致无限循环。

此外,在]令牌后,charpointer 不应递减,否则您的程序会在<{em> {{1}之前跳转到令牌这是错误的。

以下是更正后的代码:

]