2013-12-15 39 views
2

我是新来的java和我刚开始一个项目,我需要从一个.txt文件创建一个网络,其中文件中的每一行是“node1 node2”,与节点之间的列表。我创建了一个节点类和一个接受节点名称作为参数的边界类,现在我正在编写网络类。我使用Arraylist来存储我的节点和交互(边缘)信息,但我很困惑我如何在主程序中检索这些信息。网络类,因为它代表:从一个类检索ArrayList信息

import java.io.*; 
import java.util.ArrayList; 

public class Network { 

    public ArrayList<String> nodes = new ArrayList<String>(); 
    public ArrayList<String> edges = new ArrayList<String>(); 

    public String filename; 

    public Network(String f) {  

     this.filename = f; 

     FileReader networkinput = null; 

     try { 

      networkinput = new FileReader("f"); 
      BufferedReader bufferedReader = new BufferedReader(networkinput); 
      //reads the argument file in. 

      String line = null; 

      while((line = bufferedReader.readLine()) != null) { 

       edges.add(line);  // Adds each line of the file to the array 
       String delimiter = "\t"; 
       String[] tempnodelist; // Creates an array each loop 
       tempnodelist = line.split(delimiter); 
       nodes.add(tempnodelist[0]); // Adds the first node 
       nodes.add(tempnodelist[1]); // Adds second node to node array. 

      } 
      bufferedReader.close(); 
     } 
     catch (IOException e) { 

      System.out.println("Read Error!"); 
     } 
    } 
} 

按照现在的情况我想这个代码以接受文件,达到每一行和每一节点放到ArrayList的“节点”,并在每行(代表互动)到数组列表“边缘”。我不确定如何在主程序中检索这些信息,以检查它是否正在做我认为的事。

这个代码是做我期望的吗?以及如何在主程序中检索此ArrayList信息?

如有任何疑问,请咨询任何问题。

+3

*“请任何问题,如果有不清楚的地方。” *请不要忘记添加一个“?”提问!有些人在页面中搜索'?'如果'问题'中不存在,则直接进入下一个(实际)问题。或者换一种方式。你的问题是什么? –

+0

*“这段代码是否符合我的期望?”*您尝试过吗?你得到了什么? –

+0

我真的不知道如何尝试..这就是问题所在。一旦文件被输入并且ArrayLists已经被填充(如果它们实际上是...),我怎么能在主程序中显示ArrayLists – user2941526

回答

1

创建一个Network类的实例来初始化构造函数中进行的所有事情。然后访问数据。

public class TestNetwork { 
    public static void main(String[] args){ 
     Network network = new Network("file.txt"); <-- create instance 
     ArrayList<String> nodes = network.nodes; <-- reference the data 
     ArrayList<String> edges = network.edges; 

     for (String s : nodes) {     <-- traverse data 
      System.out.println(s);     <-- print data 
     } 

     for (String s : edges){ 
      System.out.println(s); 
     } 
    } 
} 

而且,错了,我在你的构造注意到另一件事是这样的

networkinput = new FileReader("f"); <-- "f" I don't think is the file path. 

你应该使用这个

networkinput = new FileReader(f); 

or 

networkinput = new FileReader(filename); 

注:考虑一下@ erzr2说。

+0

非常好,正是我所需要的。感谢您的时间! – user2941526

1

您可以调用Network.nodes来获取ArrayList,但这不一定是明智的,具体取决于您如何使用它。更可取的是使ArrayList私有并创建一个getter方法,该方法将返回ArrayList,然后您可以从另一个类中调用该方法。因此,像这样:

private ArrayList<String> nodes = new ArrayList<String>(); 
private ArrayList<String> edges = new ArrayList<String>(); 

后来有这样的:

public ArrayList<String> getNodes(){ 
    return nodes; 
} 
+0

非常感谢,这正是我所需要的。我希望我可以给你一个很好的答案:p。 – user2941526