Элементарные клеточные автоматы 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);
}
}
Предполагается, что программа печатает каждое поколение одномерной СА поверх следующего.
1 ответ
Цикл for в конце CA
класс не должен быть там. Вот почему вы получаете ошибку: синтаксический анализатор ожидает либо объявление метода, либо конец класса, отсюда и фигурная скобка.
Похоже, этот цикл на самом деле рисует CA
состояние, так что вы можете попытаться обернуть его в void draw(){}
метод. Тогда он должен быть синтаксически правильным, хотя и не уверен, работает ли он так, как ожидалось. Или переместите цикл for за пределы класса и вызовите fill
основанный на cells
состояние экземпляра CA
учебный класс.
В любом случае потребуется дополнительный код, который создает CA
экземпляр и вызывает generate
функция.