将文件中的元素存储到数组/矩阵中

时间:2016-05-23 05:44:59

标签: java arrays java.util.scanner adjacency-matrix

我试图从包含以下行的输入文件中保存元素:

numNodes 2
numEdges 2
node 0 0.62 
node 1 0.83 
edge 0 1 -silence- 0 78 
edge 0 2 -silence- 0 38

我已经使用扫描仪打开文件并将输入分解为行和单词,以访问每个单独的字符串。

我试图在包含双精度数组的数组中的节点行中保存每个double:

this.nodeTimes = new double[numNodes];

同样在邻接矩阵中保存每条边线上的三个单词:

this.adjMatrix = new Edge[numNodes][numNodes];

然而,在我的尝试中,我点击了ArrayIndexOutOfBoundsExceptions

 for (int i = 0; i < list.size(); i++) {
    String line = list.get(i);
...
    } else if (words[0].equals("node")) {
        nodeTimes[numNodes] = Double.parseDouble(words[3]); // trying to get doubles
    } else if (words[0].equals("edge")) {
            adjMatrix[Integer.parseInt(words[1])][Integer.parseInt(words[2])] = new Edge((words[3]), Integer.parseInt(words[4]), Integer.parseInt(words[5])); // trying to store edge values

如果我尝试类似的话,这种情况也同样发生:

    while(openedFile.hasNextDouble()){
        nodeTimes[numNodes] = openedFile.nextDouble();
    }

不太确定我是怎么挂断的

编辑:

访问:

nodeTimes[Integer.parseInt(words[1])] = Double.parseDouble(words[3]);    

adjMatrix[Integer.parseInt(words[1])][Integer.parseInt(words[2])] = new Edge((words[3]), Integer.parseInt(words[4]), Integer.parseInt(words[5]));

似乎也给了我一个例外。

1 个答案:

答案 0 :(得分:0)

再次查看您的代码,我会看到问题所在。

您正在使用此行创建一个大小为numNodes的数组。

this.nodeTimes = new double[numNodes];

然后,您尝试使用此行访问numNodes上的索引

nodeTimes[numNodes] = Double.parseDouble(words[3]);

以数组大小访问索引将始终为您提供ArrayIndexOutOfBoundsExceptions

您只能从0到numNodes - 1