Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文件读取字符串并为图形创建邻接列表_Java_Graph_Adjacency List - Fatal编程技术网

Java 从文件读取字符串并为图形创建邻接列表

Java 从文件读取字符串并为图形创建邻接列表,java,graph,adjacency-list,Java,Graph,Adjacency List,这里是新手!!。对于我的项目,我必须从文件中读取字符串形式的数据,并为BFS创建一个带有邻接列表的图形。我从文件中读取每一行,并将第一个字符串作为键,下一个字符串作为它的邻居。但我不明白,为什么我得到空指针异常。请看一下我的代码。我的文件看起来像这样 city.txt city1 city2 10 city1 city3 15 city2 city1 5 city2 city3 6 city2 city4 22 city2 city5 1 city3 ci

这里是新手!!。对于我的项目,我必须从文件中读取字符串形式的数据,并为BFS创建一个带有邻接列表的图形。我从文件中读取每一行,并将第一个字符串作为键,下一个字符串作为它的邻居。但我不明白,为什么我得到空指针异常。请看一下我的代码。我的文件看起来像这样

city.txt

city1  city2   10
city1  city3   15
city2  city1   5
city2  city3   6 
city2  city4   22
city2  city5   1
city3  city4   9
city3  city5   16
city4  city1   4
city4  city2   8
city5  city2   1
city5  city3   13
我的Graph.java文件是

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

public class Graph {

    Map<String, LinkedList<String>> adj;

    public Graph() {
    // TODO Auto-generated constructor stub
    }

    public Graph(String[] nodes) 
    {
       adj = new HashMap<String, LinkedList<String>>();
       for (int i = 0; i < nodes.length; ++i) 
       {
          adj.put(nodes[i], new LinkedList<String>());
       }
    }

    public void addNeighbor(String v1,String v2) {
       adj.get(v1).add(v2);
    }

    public List<String> getNeighbors(String v) {
       return adj.get(v);
    }

    public void getKeyValuePairs()
    {
        Iterator iterator = adj.keySet().iterator();

        while (iterator.hasNext()) {
           String key = iterator.next().toString();
           LinkedList<String> value = adj.get(key); 
           System.out.println(key + " " + value);
        }
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File file = new File("city.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line = br.readLine();
        String [] tokens = line.split("\\s+");
        String [] nodes = new String[tokens.length];
        for (int i = 0; i < nodes.length; ++i) {
           nodes[i] = tokens[i];
        }

        Graph g = new Graph(nodes);
        String var_1 = tokens[0];
        String var_2 = tokens[1];
        //String var_3 = tokens[2];



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

           tokens = line.split("\\s+");
           nodes = new String[tokens.length];
           for (int i = 0; i < nodes.length; ++i) {
              nodes[i] = tokens[i];
           }

           var_1 = tokens[0];
           var_2 = tokens[1];
           //String var_3 = tokens[2];

           g.addNeighbor(var_1, var_2);

        }
        g.getKeyValuePairs();
        br.close();
     }

  }

因为HashMap adj不包括顶点变量1。只能将第一行的顶点添加到图形中

编辑:下面是一个工作示例:

public class Graph
{
    Map<String, LinkedList<String>> adj;

    public Graph() {
        adj = new HashMap<String, LinkedList<String>>();
    }

    public void addNode(String node) 
    {
        adj.putIfAbsent(node, new LinkedList<String>());
    }

    public void addNeighbor(String v1,String v2) {
       adj.get(v1).add(v2);
    }

    public List<String> getNeighbors(String v) {
       return adj.get(v);
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File file = new File("city.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        String [] tokens;

        Graph g = new Graph();
        while( (line = br.readLine()) != null )
        {
           tokens = line.split("\\s+");
           g.addNode( tokens[0]);
           g.addNode( tokens[1]);
           g.addNeighbor( tokens[0], tokens[1]);
        }
        br.close();
     }
}

因为HashMap adj不包括顶点变量1。只能将第一行的顶点添加到图形中

编辑:下面是一个工作示例:

public class Graph
{
    Map<String, LinkedList<String>> adj;

    public Graph() {
        adj = new HashMap<String, LinkedList<String>>();
    }

    public void addNode(String node) 
    {
        adj.putIfAbsent(node, new LinkedList<String>());
    }

    public void addNeighbor(String v1,String v2) {
       adj.get(v1).add(v2);
    }

    public List<String> getNeighbors(String v) {
       return adj.get(v);
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File file = new File("city.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        String [] tokens;

        Graph g = new Graph();
        while( (line = br.readLine()) != null )
        {
           tokens = line.split("\\s+");
           g.addNode( tokens[0]);
           g.addNode( tokens[1]);
           g.addNeighbor( tokens[0], tokens[1]);
        }
        br.close();
     }
}
你忘了添加到地图上。以下是添加到地图中的错误修复代码:

if(adj.get(v1) == null) {
   adj.put(v1, new LinkedList<String>());
}
完整代码

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

public class Main {

    private Map<String, LinkedList<String>> adj;

    public Main() {
        // TODO Auto-generated constructor stub
    }

    public Main(String[] nodes)
    {
        adj =new HashMap<String, LinkedList<String>>();
        System.out.println("nodes" + nodes.length);
        for (int i = 0; i < nodes.length; ++i)
        {
            adj.put(nodes[i], new LinkedList<String>());
        }
    }

    public void addNeighbor(String v1,String v2) {
        if(adj.get(v1) == null) {
            adj.put(v1, new LinkedList<String>());
        }
        adj.get(v1).add(v2);
    }

    public List<String> getNeighbors(String v) {
        return adj.get(v);
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File file = new File("city.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line = br.readLine();
        String [] tokens = line.split("\\s+");
        String [] nodes = new String[tokens.length];
        for (int i = 0; i < nodes.length; ++i) {
            nodes[i] = tokens[i];
        }

        Main g = new Main(nodes);
        String var_1 = tokens[0];
        String var_2 = tokens[1];
        //String var_3 = tokens[2];

        while( (line = br.readLine()) != null )
        {
            System.out.println(" test " + line);
            tokens = line.split("\\s+");
            nodes = new String[tokens.length];
            for (int i = 0; i < nodes.length; ++i) {
                nodes[i] = tokens[i];
            }
            var_1 = tokens[0];
            var_2 = tokens[1];
            g.addNeighbor(var_1, var_2);

        }
        br.close();
    }

}
你忘了添加到地图上。以下是添加到地图中的错误修复代码:

if(adj.get(v1) == null) {
   adj.put(v1, new LinkedList<String>());
}
完整代码

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

public class Main {

    private Map<String, LinkedList<String>> adj;

    public Main() {
        // TODO Auto-generated constructor stub
    }

    public Main(String[] nodes)
    {
        adj =new HashMap<String, LinkedList<String>>();
        System.out.println("nodes" + nodes.length);
        for (int i = 0; i < nodes.length; ++i)
        {
            adj.put(nodes[i], new LinkedList<String>());
        }
    }

    public void addNeighbor(String v1,String v2) {
        if(adj.get(v1) == null) {
            adj.put(v1, new LinkedList<String>());
        }
        adj.get(v1).add(v2);
    }

    public List<String> getNeighbors(String v) {
        return adj.get(v);
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File file = new File("city.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line = br.readLine();
        String [] tokens = line.split("\\s+");
        String [] nodes = new String[tokens.length];
        for (int i = 0; i < nodes.length; ++i) {
            nodes[i] = tokens[i];
        }

        Main g = new Main(nodes);
        String var_1 = tokens[0];
        String var_2 = tokens[1];
        //String var_3 = tokens[2];

        while( (line = br.readLine()) != null )
        {
            System.out.println(" test " + line);
            tokens = line.split("\\s+");
            nodes = new String[tokens.length];
            for (int i = 0; i < nodes.length; ++i) {
                nodes[i] = tokens[i];
            }
            var_1 = tokens[0];
            var_2 = tokens[1];
            g.addNeighbor(var_1, var_2);

        }
        br.close();
    }

}

我已经对这个问题进行了编辑。你能提供一些建议,解释为什么输出不正确。解决了这个问题。。。我已经在while循环中对var_2变量进行了注释。我已经对这个问题进行了编辑。你能提供一些建议,解释为什么输出不正确。解决了它。。。我在while循环中注释了var_2变量。