[英]Java adding a 2D arraylist to a list of 2D arraylists
我正在为自己的游戏创建一个地图系统,这需要我在几个阶段中用另一个替换旧的2D阵列地图。 我想要做的是将所有2D arraylist映射添加到这些2D arraylist的列表中。 但是,我发现困难在于,当我想检索所述映射时,.get方法无法提供正确的数据,因为您将尝试提取该arraylist的第一项,在这种情况下将为null。 因此,该程序使我抛出了nullpointerexceptions。
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);
当我发出maps.get(0)时,我得到以下信息:
[[I@58838f3f
如果我有两个项目,它将显示如下:
[[[I@58838f3f, [[I@59a60155]
理想情况下,我希望这样添加它:
[I@58838f3f, I@58838f3f]
我只是不确定如何执行此操作。 任何帮助,将不胜感激!
我可能忽略了一些显而易见的事情,也许是这样!
多谢
您似乎使将地图(或地图列表)转换为字符串(这是您尝试打印它们时发生的事情)的输出与实际值混淆了。
由于ArrayList
像大多数Java容器格式一样,具有很好的toString()
实现,在尝试打印它们时会自动调用它们,因此您在输出中会得到“看起来像数组”的内容。 因此,例如,当打印包含两个字符串的数组列表时,它可能看起来像这样: [a, b]
。
数组没有很好的格式化程序,因为它们不是真正的对象(它们是“原始类型”),因此打印它们可获得地址和描述其类型的一些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
,表明没有空指针异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.