Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 做一个BrainF*ck解释器,循环麻烦_Java_Jakarta Ee - Fatal编程技术网

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++;
}
打破

该程序适用于没有[和]的程序,因为“*”我们永远不会知道你的意思。如果它解决了你的问题,请不要忘记接受答案。否则,请告诉我们还有哪些问题,我们将尽力帮助您:)