以下のコードは、10 世代から 20 世代の間で必要なことを行います。
「スイッチ」は、「The Algorithmic Beauty of Plants」の 5 ページの L システム問題に対するコンテキスト フリーの有限状態オートマトンを表し、宿題ではありません。これをザイリンクス Spartan3 FPGA 上の MicroBlaze プロセッサを使用してモデル化するつもりですが、できるだけ多くの問題を特定するために最初はソフトウェアでシミュレーションを開発しています。
ただし、現在のように順次ではなく、「スイッチ」部分を使用して並列操作を提供できるように、プログラムを変更したいと考えています。
スイッチを if .. else のブロックに置き換えることができることは知っています。
したがって、私がやりたくないのは、現在のような文字入力と文字出力を持つクラスにスイッチを囲むことです。次に、各新しいオブジェクトが正しい cellType インデックスと一致するインデックスを持つように、switch オブジェクトの ArrayList を作成します。これにより、世代ごとに、すべてのセルが順次ではなく並行して更新されます。コレクションが進むべき道かもしれません。
どんなポインタも役に立ちます。
スチュワート。
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public abstract class D0Lsimple1 extends JFrame implements ActionListener {
//private static Object celltype;
public static void d0lSimple1() {
// Open a window to get the time cycle length and convert from a string
// to an integer.
String tc = JOptionPane
.showInputDialog("Enter number of generation cycles, must be between 10 and 20.");
int tcycle = Integer.parseInt(tc);
// create an ArrayList with seed cell A.
List<Character> cellType = new ArrayList<Character>();
cellType.add('A');
System.out.println("cellType: " + cellType);
List<Character> newType = new ArrayList<Character>();
while (tcycle > 0) {
int procid = (cellType.size() - cellType.size());
while (procid != cellType.size()) {
char type = cellType.get(procid).charValue();
switch (type) {
case 'A':
newType.add('C');
newType.add('B');
break;
case 'B':
newType.add('A');
break;
case 'C':
newType.add('D');
newType.add('A');
break;
case 'D':
newType.add('C');
break;
default:
System.out.println("Invalid cell type." + type);
break;
}
procid++;
}
List<Character> temp = new ArrayList<Character>(cellType);
cellType.clear();
cellType.addAll(newType);
newType.clear();
// newType.addAll(temp);
System.out.println("procid: " + procid);
System.out.println("cellType: " + cellType);
/*
* When using this program do not input a number for growth cycles
* greater than 37, as my computer ran out of resources.
* For inputs greater than 8 one of the println line should be // out
* dependent on which is more important.
*
*/
tcycle--;
}
}
public static void main(String[] args) {
// Schedule a job for the event-dispatching thread:
// creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
d0lSimple1();
}
}
);
}
}