我遇到了一个我认为不应该发生的错误,我首先通过对驱动程序中的所有内容进行硬编码来测试代码,然后我创建了一个菜单,这就是它发生的地方。这是其中一种方法的错误。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at graph.GraphMatrix.dfs(GraphMatrix.java:92)
at graph.Driver.main(Driver.java:61)
这是Graph
的深度优先搜索方法public ArrayList<String> dfs(String x)
{
ArrayList<String> visited = new ArrayList<String>();
Stack<String> stack = new Stack<String>();
stack.push(x);
while(!stack.isEmpty())
{
visited.add(x);
for(int i = 0; i < vertices.length; i++)
{
line92 --> if(matrix[getIndex(x)][i] && !visited.contains(vertices[i]))
{
stack.push(vertices[i]);
}
}
x = stack.pop();
}
return visited;
}
我认为它与getIndex方法有关,但我不这么认为,因为如果我在驱动程序中对其进行硬编码,例如m.dfs("B");
一切都运行良好
public int getIndex(String x)
{
for(int i = 0; i < vertices.length; i++)
if(x.equals(vertices[i]))
return i;
return -1;
}
但是当我这样做让用户从菜单中选择并输入字母时它会给我arryoutofbound ....我的其他菜单选项同样如此,硬编码工作但用户输入正在给arryoutofbound。有什么想法吗?感谢。
case 3:
System.out.println("Do Depth-first-search for: ");
key = kb.nextLine();
kb.next();
line61->System.out.println(m.dfs(key));
break;