从文件读取到2D数组

时间:2016-03-02 20:55:36

标签: java arrays

我必须从这样的文件中读取数据:

4
192 48 206 37 56
123 35 321 21 41
251 42 442 32 33

第一个数字是候选人(列)的总数,我需要存储该值供其他用途。然后我需要将其余数据读入2D数组。我用我现在拥有的代码更新了代码,但它仍然无效。我一直在收到错误 java.util.NoSuchElementException:找不到行

 public static int readData(int[][] table, Scanner in)throws IOException
{
System.out.println("Please enter the file name: ");
 String location = in.next();
 Scanner fin = new Scanner(new FileReader(location));
 int candidates = fin.nextInt();
 fin.nextLine();
for (int row = 0; row < 5; row++) {
  for (int column = 0; column < candidates; column++) {
    String line = fin.nextLine();
    fin.nextLine();
    String[] tokens = line.split(" ");
    String token = tokens[column];
    table[row][column] = Integer.parseInt(token);
  }
}
fin.close();
return candidates;
}

}

1 个答案:

答案 0 :(得分:0)

据我了解,您的主要任务是从文件中提取整数值并将其放入2D数组中。

我建议您参考Oracle网站上的扫描仪API参考: https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

您可以在那里找到适合您的任务的更合适的方法:

  1. nextInt() - 用于直接从文件中获取整数值
  2. hasNextLine() - 用于确定是否有下一行输入
  3. 假设candidates列数,应将其视为整数,而不是字符串:

    int candidates = fin.nextInt();
    

    使用上述扫描程序方法,不再需要从文件中获取String值,因此可以从源代码中完全删除linenumbers个变量。

    使用hasNextLine()方法,您可以确定,该文件将被读取直到结束:

    int row = 0;
    while(fin.hasNextLine()) {                         //while file has more lines
        for(int col = 0; col < candidates; j++) {      //for 'candidates' number of columns
            table[row][col] = fin.nextInt();           //read next integer value and put into table
        }
        row++;                                         //increment row number
    }
    

    请记住, Java数组不能动态扩展

    您的2D数组 - table应该使用要放入的确切数据大小进行初始化。

    在当前示例中,您不知道文件末尾之前的输入行数,因此正确初始化数组可能需要执行其他操作。