我的任务是制作控制流图。首先,我设法将我的代码分成基本块。例如,这里的这个程序:
1 begin
2 int x, y, power;
3 float z;
4 input (x, y);
5 if (y<0)
6 power=-y;
7 else
8 power=y;
9 z=1;
10 while (power!=0){
11 z=z*x;
12 power=power-1;
13 }
14 if (y<0)
15 z=1/z;
16 output(z);
17 end
将变成以下基本块:
区块 1
Line 2 int x, y, power;
Line 3 float z;
Line 4 input (x, y);
Line 5 if (y<0)
区块 2
Line 6 power=-y;
区块 3
Line 8 power=y;
区块 4
Line 9 z=1;
区块 5
Line 10 while (power!=0){
区块 6
Line 11 z=z*x;
Line 12 power=power-1;
区块 7
Line 14 if (y<0)
块 8
Line 15 z=1/z;
第 9 块
Line 16 output(z);
我通过扫描文件并使用 Pattern 和 Matcher 根据 if、while 等语句拆分程序来完成此操作。基本块是一个 ArrayList,所有这些块都保存在一个 ArrayList> 中。
接下来,我保留了哪些基本块相互连接的 HashMap。例如,块 1 将连接到块 2 和块 3,因为它是一个 if 语句(如果这是一条路,则走另一条路)。这个 HashMap 是 > 的块号,以及它所连接的块号列表。
所以,我有基本块,以及这些基本块之间的连接列表。我现在的问题是我不确定如何以图形形式显示它。之前,我使用paint() 方法并绘制圆和线来表示一个简单的控制图,其中每个块只有一个与下一个块的连接。但是,当有多个连接时,我不知道该怎么做。有什么简单的方法可以做到这一点吗?
谢谢!