java - 使用处理的 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 打印在下一代之上。
解决方案
类末尾的 for 循环CA
不应该在那里。这就是您收到错误的原因:解析器需要方法声明或类的结尾,因此需要一个大括号。
看起来这个循环实际上是在绘制CA
状态,所以你可以尝试将它包装在一个void draw(){}
方法中。那么它应该在语法上是正确的,但不确定它是否按预期工作。或者,将 for 循环移到类之外并fill
根据类cells
实例的状态进行调用CA
。
在任何情况下,都需要一些额外的代码来创建CA
实例并调用generate
函数。