下面的代码完成了 10 到 20 代所需的操作。
“开关”代表“植物的算法之美”,第 5 页中的 L 系统问题的上下文无关有限状态自动机,而不是家庭作业。我打算在 Xilinx Spartan3 FPGA 上使用 MicroBlaze 处理器对此进行建模,但我最初是在软件中开发仿真以识别尽可能多的问题。
但是,我现在希望修改程序,以便可以使用“开关”部分来提供并行操作,而不是像现在这样按顺序操作。
我知道我可以用 if .. else's 块替换开关。
因此,我不想做的是将开关封装到一个具有类似于现在的字符输入和字符输出的类中。然后创建一个 switch 对象的 ArrayList,使得每个新对象都有一个与正确的 cellType 索引匹配的索引,因此对于每一代,所有的单元格都是并行更新的,而不是顺序更新的。收藏可能是前进的方向。
任何指针都会有所帮助。
斯图尔特。
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();
}
}
);
}
}