【发布时间】:2014-02-25 21:31:37
【问题描述】:
这是我的两个课程:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class TopoSort {
public static void main(String[] args) throws FileNotFoundException {
File textFile = new File("graphs.txt");
Scanner in = new Scanner(textFile);
int numGraphs = in.nextInt();
for(int i=0;i<1;i++)
{
int nodeNum = in.nextInt();
tsMakeGraph graph1 = new tsMakeGraph(nodeNum);
int[][] adjArray = new int[nodeNum][nodeNum];
for(int j=0;j<nodeNum;j++)
{
for(int k=0;k<nodeNum;k++)
{
adjArray[j][k] = in.nextInt();
}
for(int n=0;n<nodeNum;n++)
{
graph1.addNode(n);
}
}
for(int j=0;j<nodeNum;j++)
{
for(int k=0;k<nodeNum;k++)
{
if(adjArray[j][k] == 1)
{
graph1.makeEdge(j, k);
}
}
}
graph1.topologicalSort();
}
}
}
和
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class tsMakeGraph {
private Node nodeList[];
private int adjMatrix[][];
private int numNodes;
private int topoArray[];
public tsMakeGraph(int nodeNum) {
nodeList = new Node[nodeNum];
adjMatrix = new int[nodeNum][nodeNum];
numNodes = 0;
for (int i = 0; i < nodeNum; i++) {
for (int k = 0; k < nodeNum; k++) {
adjMatrix[i][k] = 0;
}
}
topoArray = new int[nodeNum];
}
public void addNode(int i) {
nodeList[numNodes++] = new Node(i);
}
}
当我通过 for 循环添加节点时出现越界错误,但如果我通过绑定 graph1.addNode(0)、graph1.addNode(2)、graph1.addNode(3) 手动添加节点),graph1.addNode(numNodes),它会工作。这对我来说没有意义,我一直在绞尽脑汁哈哈。顺便说一句,我编辑了我的大部分地形图类,因为这是一个硬件项目。
【问题讨论】:
-
你从异常回溯中知道异常的来源。在失败操作之前添加 System.out.println 调用以转储数组索引和数组 .length 值。有些事情会让你大吃一惊。
-
for(int i=0;i<1;i++) -
我看不出有什么明显的错误。异常发生在哪一行?顺便说一句,将 adjMatrix 的每个元素设置为 0 的 tsMakeGraph 构造函数中的循环是不必要的;新的数值数组元素已经是 0。
-
您的 j 和 n 索引 for 循环嵌套在
TopoSort中,因此您尝试将nodeNum*nodeNum元素添加到大小为nodeNum的数组 (graph1.nodeList) 中。使用 ArrayList 代替 nodeList? -
@fge 好吧,它会运行一次,也许他只是在测试一次迭代:) 请发布错误行,这样可以更容易地查明错误。这不能太难调试..
标签: java arrays list indexoutofboundsexception