在网格中读取2D数组

时间:2015-12-15 18:28:04

标签: java arrays libgdx 2d

我正在进行基本的棋盘游戏,我遇到文件阅读问题。我试着像这样读取网格:

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

我的计划是在2D阵列中读取网格后将每个数字与不同的数字相关联(1将是墙,2将是路径等)。任何帮助将不胜感激。

注意读取:使用文件阅读器扫描文本文件,以便将网格放置在二维数组中

注意:我正在开发LibGDX游戏

2 个答案:

答案 0 :(得分:0)

假设读入意味着将此字符串转换为数组数组

var str = "1 1 2 1 1 1\n1 1 2 1 1 1\n1 1 2 3 1 1\n1 1 1 3 1 1\n1 1 1 4 1 1\n1 2 2 2 4 1";

var arr = str.split('\n').map(e => e.split(' ').map(Number));

/*
[
    [1, 1, 2, 1, 1, 1],
    [1, 1, 2, 1, 1, 1],
    [1, 1, 2, 3, 1, 1],
    [1, 1, 1, 3, 1, 1],
    [1, 1, 1, 4, 1, 1],
    [1, 2, 2, 2, 4, 1]
]
*/

发生了什么?

  1. 我们根据新行'\n'
  2. 划分 String
  3. 我们根据空格' '
  4. 划分每个分区
  5. 我们将 2 的每个结果转换为数字
  6. 作为Andy points out,我在上面的功能中使用了ES6 箭头符号

    // ES6 arrow notation
    (arg1, arg2) => expr
    // can be written as legacy
    function (arg1, arg2) { return expr;}
    

答案 1 :(得分:0)

Libgdx的FileHandle有一个帮助方法,可以轻松地将文本文件读入String。以下应适用于任意大小的非方形或锯齿状数组。假设您的文件位于assets目录中:

String fileString = Gdx.files.internal("myFile.txt").readString();
String[] lines = fileString.split("\n");
int[][] theArray = new int[lines.length][];
for (int i=0; i<lines.length; i++){
    String[] elements = lines[i].split(" ");
    theArray[i] = new String[elements.length];
    for (int j=0; j<elements.length; j++)
        theArray[i][j] = Integer.parseInt(elements[j]);
}