Элементарные клеточные автоматы 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 функция.

Другие вопросы по тегам