我正在尝试迭代2D整数数组,以使用Java的Graphics2D生成平铺地图。
int[][] mapArray = {{1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1}};
public void draw(Graphics2D g2d){
for(int y = 0; y < mapArray.length; y++){
for(int x = 0; x < mapArray[0].length; x++){
if(mapArray[x][y] == 1){
ImageIcon ic = new ImageIcon("/Textures/stone.jpg");
g2d.drawImage(ic.getImage(), x, y, null);
}
else if(mapArray[x][y] == 0){
ImageIcon ic = new ImageIcon("/Textures/water.jpg");
g2d.drawImage(ic.getImage(), x, y, null);
}
我似乎无法绕过迭代2D数组的逻辑。理想地,每个0表示水瓦片,而每个1表示石瓦片。每次我运行时都会得到一个NullPointerException
。
答案 0 :(得分:1)
x和y是错误的方式
public void draw(Graphics2D g2d){
for(int y = 0; y < mapArray.length; y++){
for(int x = 0; x < mapArray[y].length; x++){ //you want to use y here not 0
if(mapArray[y][x] == 1){ //first box is outer array second is inner one
ImageIcon ic = new ImageIcon("/Textures/stone.jpg");
g2d.drawImage(ic.getImage(), x, y, null);
} else if(mapArray[y][x] == 0){
ImageIcon ic = new ImageIcon("/Textures/water.jpg");
g2d.drawImage(ic.getImage(), x, y, null);
}
}
}
}
答案 1 :(得分:1)
我可能会在您的代码中看到两个大问题,在您的代码中,“y”代表行,而“x”代表列,但在if语句中,您正在选择[column] [row]并且在干运行时你是可能计算[row] [column],其次你总是计算第一行中存在的列。如果你的数据结构在这种情况下总是nXn它会起作用,但在任何其他情况下你会得到不同的结果,你可能会遇到ArrayIndexOutofBound异常。