3
我的任務是製作一個控制流程圖。首先,我設法將我的代碼分成基本塊。例如,該程序此處:繪製控制流程圖
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
會變成以下基本塊:
BLOCK 1
Line 2 int x, y, power;
Line 3 float z;
Line 4 input (x, y);
Line 5 if (y<0)
BLOCK 2
Line 6 power=-y;
BLOCK 3
Line 8 power=y;
BLOCK 4
Line 9 z=1;
BLOCK 5
Line 10 while (power!=0){
BLOCK 6
Line 11 z=z*x;
Line 12 power=power-1;
BLOCK 7
Line 14 if (y<0)
BLOCK 8
Line 15 z=1/z;
BLOCK 9
Line 16 output(z);
我已經掃描過的文件這樣做,並使用Pattern和Matcher分裂如果基於程序了,而等語句。基本塊是一個ArrayList,所有這些塊保存在一個ArrayList>中。
接下來,我保留了一個HashMap的哪些基本塊相互連接。例如,塊1將被連接到塊2和塊3,因爲它是一個if語句(如果這是單向的,否則就是另一個)。這個HashMap對於塊號是>,並且它連接到的塊號列表。
所以,我有基本塊,以及這些基本塊之間的連接列表。我現在的問題是,我不確定如何以圖形形式顯示它。之前,我使用paint()方法並繪製圓和線來表示一個簡單的控制圖,其中每個塊只有一個連接到下一個塊。但是,我不知道如何在有多個連接時執行此操作。有沒有簡單的方法來做到這一點?
謝謝!
找到一些很好的算法來創建有向圖的佈局,例如sugiyama框架 – user902383