我是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信息?
如果有任何不清楚的地方,请提出任何问题。
答案 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;
}