Java将2D arraylist添加到2D arraylists列表中

时间:2017-07-04 18:15:51

标签: java multidimensional-array

我正在为我的游戏创建一个地图系统,这需要我在几个阶段用另一个替换旧的2D阵列地图。我想要做的是将所有2D arraylist地图添加到这些2D arraylists的列表中。但是,我发现很困难的是,当我想要检索所述地图时,.get方法不会给我正确的数据,因为你会尝试拉出该arraylist的第一项,在这种情况下将为null。因此,该计划让我无效。

private int[][] mapArray;
private List<int[][]> maps = new ArrayList<>();

    mapArray = new int[][]{
    {0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0},
    {0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 1, 9, 1, 1, 7, 7, 7, 7, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {7, 7, 7, 7, 5, 8, 8, 8, 4, 6, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {4, 4, 4, 4, 4, 8, 8, 8, 4, 4, 6, 7, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {4, 4, 4, 4, 4, 8, 8, 8, 4, 4, 4, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
   };
   maps.add(mapArray);

当我sout maps.get(0)时,我得到以下内容:

[[I@58838f3f

如果我有两个项目,它将显示如下:

[[[I@58838f3f, [[I@59a60155]

理想情况下,我希望它像这样添加:

[I@58838f3f, I@58838f3f]

我只是不确定如何做到这一点。任何帮助将不胜感激! 我可能忽略了一些显而易见的事情,可能就是这样!

非常有责任

1 个答案:

答案 0 :(得分:0)

您似乎混淆了将地图(或地图列表)转换为字符串的输出(当您尝试打印时会发生这种情况) - 具有实际值。

因为大多数Java容器格式的ArrayList具有很好的toString()实现,在尝试打印时会自动调用它们,所以你会得到一些&#34;看起来像一个数组&#34 ;在输出中。因此,例如,在打印包含两个字符串的数组列表时,它可能如下所示:[a, b]

Arrays没有这么好的格式化程序,因为它们不是真正的对象(它们是&#34;原始类型&#34;)因此打印它们会获得它们的地址和一些Java字节代码描述了它们的类型(如果你能理解Java字节代码),那么整数数组将如下所示:[I@<address>而二维字节数组将如下所示:[[B@<address>,依此类推。

关于您的原始问题,代码似乎对我有用。这是一个示例程序:

import java.util.ArrayList;

public class Test2D {

    public static void main(String... args) {
        ArrayList<int[][]> maps = new ArrayList<>();
        maps.add(new int[][] {
            {1,2,3},
            {4,5,6},
            {7,8,9},
        });
        maps.add(new int[][] {
            {10,20,30},
            {40,50,60},
        });
        int[][] map = maps.get(0);
        System.out.println(map[0][0]);
    }
}

输出将正确打印1,表明没有空指针异常。