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

标签 java jakarta-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 进行了测试,但我的程序没有执行任何操作。我无法找出上面代码算法的问题。

最佳答案

一个问题是,在 [ 标记之后,您的 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/

相关文章:

Java:将文件(使用路径)复制到目录并重命名同名文件

java - 从页面名称中删除 .jsp

java - 随机 ArrayIndexOutOfBoundsException,使用流按值对 Map 元素进行排序

java - 创建 servlet 时出现非 java 源文件夹错误

jakarta-ee - 将 JSF 应用程序迁移到 Weblogic 12

java - 寻找使用 servlet 和 JSP 的简单、安全的 session 设计

java - 是否可以使用 Wildfly 10 配置 JMS-Bridge 到 JMS-Cluster 的故障转移?

java - 将数据设置为来自一些不同 R.array(XML) 的自定义 ListView 适配器

java - 检测鼠标悬停在 Graphics2D 字符串上

java - 奇怪的错误+如何使这段代码更高效?