这是我目前的代码:
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单词来计算边缘文本文件中的所有唯一单词。然后我将这个arraylist的大小指定为我的邻接链表的大小,这样它就是no。网络中的节点。
这将是我的文本文件,friendship.txt:
Sara Sam
Sara Ajay
Sam Sean
Sam Mira
Mira Jane
Jane Maria
Rahul Sapna
Sapna Rohit
程序编译时我没有收到任何错误,但这是我的运行时错误: 输入图形输入文件名:friendship.txt
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)