将文本文件(map)加载到int数组中

时间:2015-05-02 23:39:17

标签: java file-manipulation

我需要遍历一个看起来像下面的示例的地图,并获取它的宽度和高度以及文件每个点的数字。然后,我将参数(x, y, width, height, id)添加到该位置(乘以大小)宽度。 “id”是文本文件中的当前数字。以下是文件外观的示例:

2 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 0 0 0 2
1 1 1 1 1 1 1 1 1 1

我试图在地图上的相应位置添加一个新的Tile,但mapWidth和mapHeight正在返回文件第一个位置的实际数据(在本例中为2)。如何返回此文本文件数据的宽度和高度,以便我可以向数组中添加一个磁贴?这是我尝试过的代码:

try {
    Tile[][] tiles;
    int mapWidth, mapHeight;
    int size = 64;
    //variables in same scop to save you time :)

    FileHandle file = Gdx.files.internal(s);

    BufferedReader br = new BufferedReader(file.reader());

    mapWidth = Integer.parseInt(br.readLine());
    mapHeight = Integer.parseInt(br.readLine());

    System.out.println(mapWidth);

    int[][] map = new int[mapWidth][mapHeight];
    tiles = new Tile[mapWidth][mapHeight];

    for(int i = 0; i < tiles.length; i++) {
        for(int j = 0; j < tiles[i].length; j++) {
            tiles[i][j] = new Tile(i * size, j * size, size, map[j][i]);
        }
    }

    br.close();         
} catch(Exception e) { e.printStackTrace(); }

1 个答案:

答案 0 :(得分:0)

看起来问题是你如何解析文件。对于此问题的性质,您需要逐行解析,然后在行内,您可以逐项解析。

这里是一个如何解析数据的一般示例(我使用List和ArrayList,因此我不需要处理数组的大小...如果你想要的话要使用物理数组,您可以先将整个文件读入内存function foo(a, b, opts) { if (arguments.length === 1) { console.log("one argument pass") } else if (arguments.length === 2) { console.log("two argument pass") } else if (arguments.length === 3) { console.log("three argument pass") } } foo(1); // "one argument pass" foo(1,2); // "two argument pass" foo(1,2,3); // "three argument pass" ,然后缓冲的阅读器可以插入到此List<String> lines = new ArrayList();中,您可以循环遍历它以添加每个子项数组。

数据:

$ cat Tiles.dat 
2 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 0 0 0 2
1 1 1 1 1 1 1 1 1 1

脚本(解析文件的示例):

List

输出:

$ cat Tiles.java 
import java.io.*;
import java.util.*;

class MainApp {
    public static void main(final String[] args) {
        final String fileName = "Tiles.dat";
        try {
            File file = new File(fileName);
            FileReader fileReader = new FileReader(file);
            BufferedReader br = new BufferedReader(fileReader);

            List<List<Integer>> map = new ArrayList<List<Integer>>();

            String line = null;
            while ((line = br.readLine()) != null) {
                String[] items = line.split(" ");
                ArrayList<Integer> intItems = new ArrayList<Integer>();
                for (String item : items) {
                    int intItem = Integer.parseInt(item);
                    intItems.add(intItem);
                }

                map.add(intItems);
            }
            br.close();

            System.out.println("map: '" + String.valueOf(map) + "'.");
            for (List<Integer> intItems : map) {
                System.out.println("intItems: '" + String.valueOf(intItems) + "'.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

希望有所帮助!