Wolfram基本细胞自动机使用处理

时间:2019-01-23 15:49:21

标签: java processing cellular-automata

我正在使用从网站The Nature of Code-https://natureofcode.com/book/chapter-7-cellular-automata/中获取的一段代码,我使用的部分来自示例7.1。我正在尝试使用Processing 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。

1 个答案:

答案 0 :(得分:0)

CA类末尾的for循环不应该存在。这就是为什么会出现错误的原因:解析器期望方法声明或类的末尾,因此使用大括号。

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

无论如何,将需要一些其他代码来创建CA实例并调用generate函数。