Элементарные клеточные автоматы Wolfram с использованием обработки - PullRequest
0 голосов
/ 23 января 2019

Я использую фрагмент кода, взятый с сайта 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 Ответ

0 голосов
/ 23 января 2019

Цикл for в конце класса CA не должен быть там.Вот почему вы получаете сообщение об ошибке: синтаксический анализатор ожидает объявления метода или конца класса, отсюда и фигурная скобка.

Похоже, что этот цикл на самом деле рисует состояние CA, так что вы можетепопытайтесь обернуть это в void draw(){} метод.Тогда он должен быть синтаксически правильным, хотя и не уверен, работает ли он так, как ожидалось.В качестве альтернативы переместите цикл for за пределы класса и вызовите fill в зависимости от состояния cells экземпляра класса CA.

В любом случае потребуется дополнительный код, который создаетэкземпляр CA и вызывает функцию generate.

...