【问题标题】:storing elements from a file into an array/matrix将文件中的元素存储到数组/矩阵中
【发布时间】:2016-05-23 05:44:59
【问题描述】:

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

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

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

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

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]));

似乎也给了我一个例外。

【问题讨论】:

  • 你在哪一行得到了异常?
  • 您能否发布堆栈跟踪并告诉我们堆栈跟踪所指代码中的哪一行。还有你要循环的列表是什么?
  • 当你使用new double[10]创建一个数组时,索引将是0到9。你的代码有nodeTimes = new double[numNodes],但是你有nodeTimes[numNodes] = ...,并且索引numNodes不存在, 只有 0numNodes-1 的值才可以。
  • @Andreas 所以我的问题是尝试在 numNodes 访问,我想这样做:nodeTimes[Integer.parseInt(words[1])] = Double.parseDouble(words[3]);在给定的节点号访问?然而,这也给了我一个例外。
  • @aviad 在行 nodeTimes[numNodes] = 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]));

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


【解决方案1】:

再次查看您的代码,我知道问题出在哪里。

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

this.nodeTimes = new double[numNodes];

然后你试图用这一行访问 numNodes 处的索引

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

以数组大小访问索引总是会给你一个ArrayIndexOutOfBoundsExceptions

你只能从0到numNodes - 1

【讨论】:

  • 我应该在节点的每个值(第二个单词)处访问数组吗? nodeTimes[Integer.parseInt(words[1])] = Double.parseDouble(words[3]);也会给我一个索引越界异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2021-08-28
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 2021-12-15
  • 2020-07-07
相关资源
最近更新 更多