从类中检索ArrayList信息

时间:2013-12-15 13:18:06

标签: java class arraylist

我是java的新手,我刚刚开始了一个项目,我需要从.txt文件创建一个网络,其中文件中的每一行都是“node1 node2”,节点之间有一个列表。我创建了一个节点类和一个接受节点名作为参数的边类,现在我正在编写网络类。我正在使用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“edges”。我不确定如何在主程序中检索这些信息,以检查它是否正在按照我的想法进行。

这段代码是否符合我的期望?以及如何在主程序中检索此ArrayList信息?

如果有任何不清楚的地方,请提出任何问题。

2 个答案:

答案 0 :(得分: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所说的内容。

答案 1 :(得分:1)

您可以调用Network.nodes来获取ArrayList,但这不一定是可取的,具体取决于您使用它的方式。更合适的做法是将ArrayList设为私有并创建一个将返回ArrayList的getter方法,然后您可以从另一个类调用该方法。所以像这样:

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

然后有了这个:

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