-3

我的目标是从 txt 文件中读取数据,并将它们放入二维数组中。我的代码给我的问题是:

    Scanner input = new Scanner(new FileReader(file));

    //save the number of vertex's
    vCount = input.nextInt();

    //create a 2d array
    Integer[][] adjList = new Integer[vCount][vCount];

    String line;
    String [] arrLn;

    for (int i = 0; i < vCount; i++) {

        line = input.nextLine(); //the value of 'line' never changes
        arrLn = line.split(" ");

        for (int j = 0; j < vCount; j++) {
            adjList[i][j] = Integer.parseInt(arrLn[j]); //errors list problem is here
        }
    }

示例 txt 文件是这样的:

5
1 2 3 4
2 3
3 1 2
4 1 4
5 2 4

其中第一行是顶点数,其余行是要插入数组的数据。需要插入它们,以便 txt 文件中的每一行都保留在数组中自己的行中(即:数组第 1 行中的元素不能等于 '1,2,3,4,2,3',而是 '1, 2,3,4'。

我一生都无法理解为什么 line 变量实际上并没有读取该行。我在代码中没有错误,就在我运行它的时候。

收到错误:

run:
Enter the File Name
C:\Users\YAZAN\Desktop\test.txt
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at dbsearchs.Graph.runBFS(Graph.java:38)
at dbsearchs.Driver.main(Driver.java:24)
Java Result: 1
BUILD SUCCESSFUL (total time: 26 seconds)
4

1 回答 1

2

首先,你真的确定linenever 的值会改变吗?

其次,可能会出现问题,因为您先调用 input.nextInt(),然后调用 input.nextLine()。尝试执行 input.nextLine() 而不是 nextInt() 并从该行获取您的号码。目前,您对 input.nextLine() 的第一次调用很可能会为您提供第一行的剩余内容——什么也没有。

第三,我相信一旦在运行程序时修复了 NumberFormatException ,您将得到一个 ArrayIndexOutOfBounds 异常。在第二个循环中,不要循环直到 vCount 而是循环直到 arrLn.length 。

于 2013-09-14T00:56:10.537 回答