首页 > 解决方案 > 使用处理的 Wolfram 初等元胞自动机

问题描述

我正在使用取自网站 The Nature of Code - https://natureofcode.com/book/chapter-7-cellular-automata/的一段代码 -我使用的部分来自示例 7.1。我正在尝试使用处理 IDE 创建一维元胞自动机,但我不断收到错误消息,指出特定位置缺少括号。

错误:-缺少花括号“}”,第 32 行 -“}”上的语法错误,删除此,第 40 行

我已经重复了很多次,但我看不出这是怎么回事。尽管我确实尝试按照它所说的那样更改它们,但只是为了得到更多的错误。我想也许他们只是在错误的地方,但我也看不出是怎么回事。据我所知,它们似乎是正确的,但也许我遗漏了一些东西。这是我第一次使用 Processing,距离我上次使用 Java 已经有很长时间了。所以也许我错了。

class CA {
  int[] cells;
  int[] ruleset;
  int w = 10;
  // The CA should keep track of how
  // many generations.
  int generation = 0;
  CA() {
    cells = new int[width/w];
    ruleset = new int[]{0,1,0,1,1,0,1,0};
    cells[cells.length/2] = 1;
  }

  // Function to compute the next generation
  void generate() {
    int[] nextgen = new int[cells.length];
    for (int i = 1; i < cells.length-1; i++) {
      int left   = cells[i-1];
      int me     = cells[i];
      int right  = cells[i+1];
      nextgen[i] = rules(left, me, right);
    }
    cells = nextgen;
    // Increment the generation counter.
    generation++;
  }

  int rules(int a, int b, int c) {
    String s = "" + a + b + c;
    int index = Integer.parseInt(s,2);
    return ruleset[index];
  }

  for (int i = 0; i < cells.length; i++) {
    if (cells[i] == 1) fill(0);
    else               fill(255);
    // Set the y-location according to the generation.
    rect(i*w, generation*w, w, w);
  }
}

该程序应该将每一代一维 CA 打印在下一代之上。

标签: javaprocessingcellular-automata

解决方案


类末尾的 for 循环CA不应该在那里。这就是您收到错误的原因:解析器需要方法声明或类的结尾,因此需要一个大括号。

看起来这个循环实际上是在绘制CA状态,所以你可以尝试将它包装在一个void draw(){}方法中。那么它应该在语法上是正确的,但不确定它是否按预期工作。或者,将 for 循环移到类之外并fill根据类cells实例的状态进行调用CA

在任何情况下,都需要一些额外的代码来创建CA实例并调用generate函数。


推荐阅读