这是我的代码 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 进行了测试,但我的程序没有执行任何操作。我无法找出上面代码算法的问题。
最佳答案
一个问题是,在 [
标记之后,您的 charpointer
不会增加。
这意味着如果当前datapointer
下的值非零,您的程序就会卡在[
符号上,因为++charpointer
甚至没有被执行一次。
如果datapointer
指向零,它就会跳转到相应的]
,从而导致无限循环。
此外,在 ]
标记之后,charpointer
不应该递减,否则您的程序会跳转到之前的标记 em> ]
,这是错误的。
这是更正后的代码:
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--;
}
}
charpointer ++;
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++;
}
break;
关于java - 制作一个 BrainF*ck 解释器,循环遇到麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22174626/