有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从边的文本文件创建网络

这是我目前的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;

class Neighbor 
{
    public int vertexNum;
    public Neighbor next;
    public Neighbor(int vnum, Neighbor nbr) 
    {
            this.vertexNum = vnum;
            next = nbr;
    }
}


class Vertex 
{
    String name;
    Neighbor adjList;
    Vertex(String name, Neighbor neighbors) 
    {
            this.name = name;
            this.adjList = neighbors;
    }
}


public class Graph 
{

    Vertex[] adjLists;

    public Graph(String file) throws FileNotFoundException 
    {
        Scanner fileScanner = new Scanner(new File(file));
        fileScanner.useDelimiter("[^A-Za-z0-9]");

        ArrayList<String> words = new ArrayList<String>();

        while (fileScanner.hasNext())
        {
            String nextWord = fileScanner.next();
            if (!words.contains(nextWord))
            {
                words.add(nextWord);
            }
        }

        adjLists = new Vertex[words.size()];

        // read vertices
        for (int v=0; v < adjLists.length; v++) 
        {
            adjLists[v] = new Vertex(fileScanner.next(), null);
        }

        // read edges
        while (fileScanner.hasNext()) 
        {
             // read vertex names and translate to vertex numbers
            int v1 = indexForName(fileScanner.next());
            int v2 = indexForName(fileScanner.next());

            // add v2 to front of v1's adjacency list and
            // add v1 to front of v2's adjacency list
            adjLists[v1].adjList = new Neighbor(v2, adjLists[v1].adjList);
            adjLists[v2].adjList = new Neighbor(v1, adjLists[v2].adjList);
        }
    }

    int indexForName(String name) 
    {
        for (int v=0; v < adjLists.length; v++) {
            if (adjLists[v].name.equals(name)) {
                return v;
            }
        }
        return -1;
    }   

    public void print() 
    {
        System.out.println();
        for (int v=0; v < adjLists.length; v++) {
            System.out.print(adjLists[v].name);
            for (Neighbor nbr=adjLists[v].adjList; nbr != null;nbr=nbr.next) {
                System.out.print(" --> " + adjLists[nbr.vertexNum].name);
            }
            System.out.println("\n");
        }
    }

    public static void main(String[] args) 
    throws IOException 
    {
        Scanner br = new Scanner(System.in);
        System.out.print("Enter graph input file name: ");
        String file = br.nextLine();
        Graph graph = new Graph(file);
        graph.print();
        br.close();

    }

}

所以,我尝试使用ArrayList单词来计算我的边缘文本文件中的所有唯一单词。然后我将这个数组列表的大小指定为邻接链表的大小,这样它就是网络中的节点数

这将是我的文本文件,友谊。txt:

Sara Sam
Sara Ajay
Sam Sean
Sam Mira
Mira Jane
Jane Maria
Rahul Sapna
Sapna Rohit

程序编译时我没有收到任何错误,但这是我的运行时错误: 输入图形输入文件名:Friendly。文本

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at Graph.<init>(Graph.java:64)
    at Graph.main(Graph.java:109)

共 (0) 个答案