我在這裏有一段代碼。這是我的Dijkstra實現中的一個片段。在這裏,我們有4個頂點被實例化,每個頂點指定了邊和它與頂點(節點)的距離。如果數據將直接輸入到主類中,則此代碼非常簡單直接。Java HashMap文件輸入版本代碼
Vertex v0 = new Vertex("Redvile");
Vertex v1 = new Vertex("Blueville");
Vertex v2 = new Vertex("Greenville");
Vertex v3 = new Vertex("Orangeville");
Vertex v4 = new Vertex("Purpleville");
v0.adjacencies = new Edge[]{ new Edge(v1, 5),
new Edge(v2, 10),
new Edge(v3, 8) };
v1.adjacencies = new Edge[]{ new Edge(v0, 5),
new Edge(v2, 3),
new Edge(v4, 7) };
v2.adjacencies = new Edge[]{ new Edge(v0, 10),
new Edge(v1, 3) };
v3.adjacencies = new Edge[]{ new Edge(v0, 8),
new Edge(v4, 2) };
v4.adjacencies = new Edge[]{ new Edge(v1, 7),
new Edge(v3, 2) };
但是,我的數據來自文件。我必須讀取文件並創建頂點的實例以及每個頂點上的邊(鄰接點)。我有一個實現這個功能的問題。換句話說,我需要一個代碼將上面的這段代碼翻譯成其中的數據來自文件。
這是我的示例數據:
a0 - a1,1.6
a1 - a0,1.6 * a2,0.85 * a3,0.5
a2 - a1,0.85 * a34,1.2 * a39,0.65
a3 - a1,0.5 * a4,0.2 * a5,0.1
a4 - a3,0.2 * a5,0.2
a5 - a4,0.1 * a6,1 * a36,0.65
a6 - a5,1 * a7,1.5 * a14,0.45
a7 - a6,1.5 * a8,0.18 * a11,1.2
a8 - a7,0.18 * a9,1
a9 - a8,1
a10 - a13,1.9
的A0-A10是頂點和a1,1.6有其他表示鄰接或邊緣連接到(頂點,距離)格式的頂點。
到目前爲止,我能夠讀取此文件並將每行放在ArrayList上。我現在的問題基本上是如何實例化每個頂點並添加鄰接關係。
這是我讀文件:
private void readFile(String fileName) {
try{
FileReader file = new FileReader(fileName);
Scanner sc = new Scanner(file);
int i = 0;
while (sc.hasNextLine()) {
input.add(sc.nextLine());
i++;
}
setNodes();
System.out.println();
file.close();
} catch(Exception e){
System.out.println(e);
}
}
的輸入是每行包含該文件的所有內容ArrayList中。另一方面,節點將具有所有頂點的列表。
public void setNodes() {
System.out.println();
for(int i=0; i<input.size(); i++) {
line = this.input.get(i);
nodes.add(line.substring(0,line.indexOf("-")).trim());
}
}
此外,
PS 我還與數據類型的問題。我的arrayList是字符串,頂點是Vertex類型,它是我的代碼中定義的類。
如果此描述不充分,請隨時發表評論。謝謝你,歡呼!
告訴我們您是如何閱讀文件 – Greg 2013-03-14 17:11:25
更新的,@ greg :) – princepiero 2013-03-14 17:16:28