【问题标题】:Java: Reading txt file into a 2D arrayJava:将txt文件读入二维数组
【发布时间】:2012-09-17 17:35:19
【问题描述】:

对于家庭作业,我们必须读入一个包含地图的 txt 文件。使用地图,我们应该读取其内容并将它们放入二维数组中。

我已设法将文件读入一维字符串数组列表,但我遇到的问题是将其转换为二维字符数组。

这是我目前在构造函数中的内容:

try{

  Scanner file=new Scanner (new File(filename));

    while(file.hasNextLine()){

        ArrayList<String> lines= new ArrayList<String>();

        String line= file.nextLine();

        lines.add(line);    

        map=new char[lines.size()][];

    }
}
catch (IOException e){
    System.out.println("IOException");
}

当我打印出 lines.size() 时,它打印出 1,但当我查看文件时,它有 10。

提前致谢。

【问题讨论】:

    标签: java arrays map arraylist 2d


    【解决方案1】:

    您必须在循环之外创建列表。在您的实际实现中,您为每个新行创建一个新列表,因此它的大小始终为 1。

    // ...
    Scanner file = new Scanner(new File(filename));
    List<String> lines = new ArrayList<String>();  // <- declare lines as List
    while(file.hasNextLine()) {
    // ...
    

    顺便说一句 - 我不会将 char[][] 变量命名为 map。 Map 是一种完全不同的数据结构。这是一个数组,如果您在循环内创建,那么您可能会遇到与列表相同的问题。但是现在你应该知道一个快速的解决方法;)

    【讨论】:

      【解决方案2】:

      修改代码如下:

      public static void main(String[] args) {
              char[][] map = null;
              try {
                  Scanner file = new Scanner(new File("textfile.txt"));
                  ArrayList<String> lines = new ArrayList<String>();
                  while (file.hasNextLine()) {
                      String line = file.nextLine();
                      lines.add(line);
                  }
                  map = new char[lines.size()][];
              } catch (IOException e) {
                  System.out.println("IOException");
              }
              System.out.println(map.length);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多