Java 做一个BrainF*ck解释器,循环麻烦
这是我的密码 特别是,这是应该控制[和]的部分Java 做一个BrainF*ck解释器,循环麻烦,java,jakarta-ee,Java,Jakarta Ee,这是我的密码 特别是,这是应该控制[和]的部分 case Token.LEFT: if (tape[datapointer] == 0 ){ int i =1; while (i > 0) { char c2 = (char) c[++charpointer];
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进行了测试,但我的程序什么都没做。我无法用上面的代码算法解决这个问题 一个问题是,在
[
标记之后,您的字符指针不会递增
这意味着,如果当前datapointer
下的值非零,则程序会卡在[/code>符号上,因为++charpointer
甚至不会执行一次。
如果datapointer
指向零,它会跳到相应的]
上,导致无限循环
另外,在]
标记之后,不应递减字符指针
,否则程序会在]
之前跳到标记上,这是错误的
以下是更正后的代码:
case-Token.LEFT:
如果(磁带[datapointer]==0){
int i=1;
而(i>0){
字符c2=(字符)c[++charpointer];
如果(c2==令牌。左)
i++;
else if(c2==令牌.RIGHT)
我--;
}
}
charpointer++;
打破
case Token.RIGHT:
int i=1;
而(i>0){
char c2=(char)c[--charpointer];
如果(c2==令牌。左)
我--;
else if(c2==令牌.RIGHT)
i++;
}
打破
该程序适用于没有[和]的程序,因为“*”我们永远不会知道你的意思。如果它解决了你的问题,请不要忘记接受答案。否则,请告诉我们还有哪些问题,我们将尽力帮助您:)