当前位置: 首页 > 知识库问答 >
问题:

如何将带字符串的文本文件读入带邻接列表的无向图

颛孙英才
2023-03-14

菜鸟来了!我想实现一个类图形,可以表示一个未加权和无向图使用邻接列表。基本功能应该包括添加和删除顶点和边,以及将图形打印到命令行。我的主要问题是我很难将文件读入图表。我做错了什么?

我的文本文件如下所示:

Anna    Noah
Anna    Marie
Marie   Noah
Marie   Jakob
Marie   Hanna
Jakob   Felix
Hanna   Felix
Hanna   Jonas
Felix   Jonas
Felix   Emma
Felix   Finn
Felix   Ben 

(每条线代表由一条边连接的两个节点)。

我的代码是:

public class UndirectedGraphs {
HashMap<String, LinkedList<String>> socialNetworkAdj;

public UndirectedGraphs() {
    socialNetworkAdj = new HashMap<String, LinkedList<String>>();


}
public void addVertex(String label){
    socialNetworkAdj.put(label, new LinkedList<String>());
}

public LinkedList<String> getEdges(String label) {
    return socialNetworkAdj.get(label);
}

public void addEdges(String ver1, String ver2) {
    if (!socialNetworkAdj.containsKey(ver1)) {
        addVertex(ver1);
    }

    if (!socialNetworkAdj.containsKey(ver2)) {
        addVertex(ver2);
    }
    socialNetworkAdj.get(ver1).add(ver2);
    socialNetworkAdj.get(ver2).add(ver1);
    System.out.println(socialNetworkAdj);

}


public static void main(String[] args) throws Exception {

    File filePath = new File("C:\\Users\\Fo\\Desktop\\A9\\network.txt");
    FileReader fr = new FileReader(filePath);
    BufferedReader br = new BufferedReader(fr);

    String[] tokens = new String[2];
    ArrayList<String> nodes = new ArrayList<>();
    UndirectedGraphs graph = new UndirectedGraphs();
    String line;
    String var1 = tokens[0];
    String var2 = tokens[1];

    while ((line = br.readLine()) != null) {
        graph.addEdges(var1, var2);
    }
    System.out.println("\nAnna: --> " + graph.getEdges("Anna"));
    br.close();

}

}

输出为:

{null=[null, null]}
{null=[null, null, null, null]}
{null=[null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, 
null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}
{null=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}

共有1个答案

庾远航
2023-03-14

正如注释中指出的,在while循环的每次迭代中,您都需要获取读取行的名称,并在迭代时添加它们。

while((line = br.readLine()) != null) {
    String [] nodes = line.split("\\s+");
    if(nodes.length == 2)
        graph.addEdges(nodes[0], nodes[1]);
    // optional else with error handling
}
 类似资料:
  • 问题内容: 如何从二进制文件写入/读取字符串? 我试过使用/ (DataOutputStream / DataInputStream),但这太麻烦了。 谢谢。 问题答案: 暂时忘掉FileWriter,DataOutputStream。 对于二进制数据,使用和分类。他们处理。 对于文本数据,使用和分类。他们处理可以存储所有类型的文本,因为它内部使用Unicode。 通过指定默认为OS编码的编码,可

  • 问题内容: 这是与许多人相似的问题,但并不完全相同。我有一个文本文件,其中包含约40万行文本。每行本质上都是一个列表。例如看起来 我可以使用以下代码读取文本文件的每一行: 问题是每行都被读取为字符串。我想获取列表中的每个项目。所以我想我会做(针对每一行): 这几乎可行,但是我遇到了问题。在我的文本文件中,很多时候我在列表中都有一个字符串,其中有一个逗号(从上面我有’d and,e string’)

  • 好的,我当前的代码使用整数创建了一个列表,但是我希望它使用字符串。我要使用的字符串位于一个名为names.txt的文本文件中,该文件如下所示: 我的代码如下: 这给出了输出: 然而,不是0,1,2等,我想让它读彼得,西门,马可等。 谢谢!

  • 问题内容: 我认为能够将文本文件读入和写出字符串数组的能力是相当普遍的要求。从一种语言开始消除最初访问数据库的需求时,它也非常有用。Golang中是否存在? 例如 和 我宁愿使用现有的而不是重复的。 问题答案: 从Go1.1版本开始,有一个bufio.Scanner API可以轻松读取文件中的行。考虑上面的以下示例,该示例使用Scanner重写:

  • 问题内容: 我将日志保存到sdcard上的.txt文件中,但是一旦保存了两行,它就会覆盖它并重新开始? 这是我的代码: 在恢复中挂载/ data后,/ sdcard和/ data / media / 0中的日志文件会显示完整的日志历史记录,但在设备开机时不会显示完整的日志历史记录 问题答案: 这是完成的方式。以下示例代码在单击提交按钮后将详细信息保存到文件中: 希望这可以帮助 :)

  • 我有一个源代码,它读取文本文件并存储到一个元组类型的向量中: 包含以下数据: 因此数据由空格+垂直线+空格(多重分隔符)分隔。 如何更改源代码以处理多个分隔符? 注意:如果数据仅用空格隔开,则程序可以工作。