这是我GridGenerator
课程中的代码。目的是创建多个矩形房间,最终可以将它们连接在一起成为地图。
int xRange, yRange;
//constructor
public GridGenerator(int xInput, int yInput) {
xRange = xInput;
yRange = yInput;
}
int[][] grid = new int[yRange][xRange];
//the first number indicates the number of rows, the second number indicates the number of columns
//positions dictated with the origin at the upper-left corner and positive axes to bottom and left
void getPosition(int x, int y) {
int position = grid[y][x]; //ArrayIndexOutOfBoundsException here
System.out.println(position);
}
这是我MapperMain
课程中的代码。目的是将GridGenerator
个实例加入多房间地图。我现在也将它用于调试和脚手架目的。
public static void main(String[] args) {
GridGenerator physicalLayer1 = new GridGenerator(10,15);
physicalLayer1.getPosition(0, 0); //ArrayIndexOutOfBoundsException here
}
我收到了一个ArrayIndexOutOfBoundsException错误。在某些时候,xRange
的值为10,yRange
的值为15.但是,当我尝试使用xRange
和yRange
作为参数时, grid
,Java有一些问题,我不知道为什么。如果我在xRange
类中为yRange
和GridGenerator
分配值,则似乎没有问题。当我在MapperMain
类中使用构造函数时,我收到此错误。
答案 0 :(得分:5)
这一行
grid = new int[yRange][xRange];
应该在构造函数中,因为在您的代码示例中,grid
从未使用yRange
和xRange
的正确值进行初始化。
所以 - 你的课应该是这样的:
public class GridGenerator {
private int xRange, yRange;
private int[][] grid;
//constructor
public GridGenerator(int xInput, int yInput) {
xRange = xInput;
yRange = yInput;
grid = new int[yRange][xRange];
}
...
}
答案 1 :(得分:4)
问题在于这一行:
int[][] grid = new int[yRange][xRange];
尽管在构造函数之后编码,但在构造函数执行之前执行,并且当行执行时,大小变量的默认初始值为0
它在构造函数之前执行的原因是由于初始化顺序:(除其他外)所有实例变量都按编码顺序初始化,在构造函数执行之前。
要解决此问题,请将代码更改为:
// remove variables yRange and xRange, unless you need them for some other reason
int[][] grid;
public GridGenerator(int yRange, int xRange) {
grid = new int[xRange][yRange];
}
答案 2 :(得分:0)
int[][] grid = new int[yRange][xRange];
您必须在数组范围内给出一些固定值,如果要查找动态数组,请使用数组列表