gpt4 book ai didi

java - 制作一个 BrainF*ck 解释器,循环遇到麻烦

转载 作者:太空宇宙 更新时间:2023-11-04 15:04:35 31 4
gpt4 key购买 nike

这是我的代码 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com