2014-05-01 186 views
-2

我試圖使用java中的數據結構來模擬節點網絡。讓我們假設我有4個節點的網絡,即0 1 2 3。現在,我創建數據的文本文件,如下所示:從文件中讀取數據並形成數據結構Info

0 1 
1 2 
2 3 
0 3 

的數據表示節點之間的連接。有一個從0到1等的鏈接。所有的鏈接都是單向的。現在我想尋求你們的幫助,知道如何閱讀這個文本文件並形成數據結構。哪個數據結構對此可行?我將在整個模擬過程中使用這個數據結構來在對象之間發送數據。哪一個會更好,使用樹木或hashmaps?當讀取文本文件並形成數據結構時代碼將如何?這個你能幫我嗎。

+0

我們無法爲您編寫程序。你有現有的代碼,我們可以看看你有問題嗎? – BradleyDotNET

回答

0

我會用linked list。當它們之間「傳輸」數據時,確保你標記了哪一個啓動了數據包,這樣你的例子中的循環排列不會超出堆棧。

1

你可能想要做的是創建一個節點類,其中有一個字段指示該節點能夠連接到哪個節點。然後您需要從文件中讀取連接,並使用Node構造函數中的數據建立連接。

關於讀取數據,您可以使用ArrayList,Array和Buffered Reader來完成此操作。它首先設置ArrayList,然後使用BufferedReader獲取連接,將每個對存儲在數組中並將其存儲在ArrayList中以供引用。

//ArrayList which will hold the arrays containing the connections 
    ArrayList<int[]> connections = new ArrayList<int[]>(4); 
    Path pathway = Paths.get("D:/Users/mgreenma/Desktop/tester.txt");//Path to file 

    //Using a BufferedReader and FileReader we access the file 
    try(BufferedReader reader = new BufferedReader(new FileReader(pathway.toFile()))){ 
     String line = ""; 
     Scanner sc = new Scanner(line); 
     while((line = reader.readLine()) != null){ //Read each line until there are no more 
      sc = new Scanner(line); //Set up a scanner 
      int[] conn = new int[2]; //An array to hold each pair of nodes 
      conn[0] = sc.nextInt(); //Get first node 
      conn[1] = sc.nextInt(); //And the second 
      connections.add(conn); //Add to the ArrayList 
     } 

     sc.close(); //Close scanner 
    } catch (IOException io){ 
     System.out.println("Error: " + io.getMessage());    
    } 

    for(int[] i : connections){//Print our connections list 
     System.out.println("Connection: " + i[0] + "," + i[1]); 
    } 

祝你好運!

+0

感謝您的時間levenal。現在,如果想在其他類中使用此列表來檢查我是否有從x到y的路徑。可能嗎?並且如果有一個節點有兩個傳出節點...就像1有0和2作爲傳出鄰居,我的文本文件就像10,然後是1 2 ....如果有多個節點之間的這種多重連接..我仍然可以使用數組列表嗎?或者我應該使用圖形? – user3029915

+0

@ user3029915您可以遍歷ArrayList檢查每個數組以獲取所需的值,例如[1,2]的數組顯示1到2之間的連接。通過多個節點,您可能會向ArrayList添加更多數組,以表示連接,它不應該是一個問題,但你可能想指定一個更大的默認大小。 – Levenal

相關問題