Java 索引736超出长度500的界限

Java 索引736超出长度500的界限,java,exception,Java,Exception,我正在尝试读取一些csv文件并构建一个图表,但不断收到以下消息: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 736 out of bounds for length 500 at CitiesClass.main(CitiesClass.java:35) 这显然是这条线 [Integer.parseInt(results[1])]=1.0; 但我到底做错了什么 完整代码: impo

我正在尝试读取一些csv文件并构建一个图表,但不断收到以下消息:

Exception in thread "main" 
java.lang.ArrayIndexOutOfBoundsException: 
Index 736 out of bounds for length 500
at CitiesClass.main(CitiesClass.java:35)
这显然是这条线

[Integer.parseInt(results[1])]=1.0;
但我到底做错了什么

完整代码:

import java.io.*;
import java.util.Scanner;
import java.util.*;

class CitiesClass {

 static int N = 500;
 static double [][] edges = new double[N][N];
 static TreeMap <Integer,String> cityNames = new TreeMap
    <Integer,String>();
 static ArrayList<String> convert(ArrayList<Integer> m) {
    ArrayList<String> z = new ArrayList<String>();
    for (Integer i:m) z.add(cityNames.get(i));
    return z;
   }

 static HashSet<ArrayList<String>> convert
  (HashSet<ArrayList<Integer>> paths) {
    HashSet <ArrayList <String>> k = new HashSet <ArrayList<String>>();
    for (ArrayList <Integer> p:paths) k.add(convert(p));
    return k;
    }

public static void main(String[] args) throws Exception {
  for(int i=0;i<N;i++)
  for(int j=0;j<N;j++)
  edges[i][j]=0.0;
  Scanner s = new Scanner(new FileReader("randomGraph.csv"));
  String z = s.nextLine();
  while (s.hasNext()) {
    z =s.nextLine();
    String[] results = z.split(",");
    edges[Integer.parseInt(results[0])]
    [Integer.parseInt(results[1])]=1.0;
    edges[Integer.parseInt(results[1])]
    [Integer.parseInt(results[0])]=1.0;
  }

  s = new Scanner(new FileReader("cities.csv"));
  z =s.nextLine();
  while (s.hasNext()) {
    z =s.nextLine();
    String[] results = z.split(",");
    cityNames.put(Integer.parseInt(results[0]), results[1]);
  }

  graph G = new graph(edges);
  int st = Integer.parseInt(args[0]);
  int fin = Integer.parseInt(args[1]);
  System.out.println("Shortest path from " + cityNames.get(st)
      + " to " + cityNames.get(fin) + " is" + 
      convert(G.shortestPaths(st,fin)));
  }
}
但我到底做错了什么


您假设0异常消息加上int N=500似乎是相关的。@luk2302我明白了,但我不明白如何。这会产生一个错误:线程主java.lang.NumberFormatException中的异常:对于输入字符串:4752,45.97182OK,看起来它在那里得到的数据比节点数更多。752看起来很相关;不知道4号和45号是什么。诸如此类。所以,像您正在做的那样拆分它并解析相关部分。我相信上面的字符串是文件的第一行,736是第二行。仍然不知道为什么这不起作用。是的:752在第一线。以某种方式提取它,然后使用它初始化数组。然后,当您解析第二行或任何后续行中的736时,您的数组足够大。
String z = s.nextLine();
int graphSize = Integer.parseInt(z);
edges = new double[graphSize][graphSize]