0

这是我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。但是,当我尝试使用xRangeyRange作为 的参数时grid,Java 有一些问题,我不知道为什么。如果我为班级xRange和班级分配值,似乎没有问题。当我在类中使用构造函数时,出现此错误。yRangeGridGeneratorMapperMain

4

3 回答 3

5

这条线

grid = new int[yRange][xRange];

应该在构造函数中,因为在您的代码示例grid中从未使用正确的值初始化yRangeand 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]; 
     }

     ...
}
于 2013-10-14T13:03:00.173 回答
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];
}
于 2013-10-14T13:04:46.983 回答
0
int[][] grid = new int[yRange][xRange]; 

您必须在数组范围内给出一些固定值,如果要查找动态数组,请使用数组列表

于 2013-10-14T13:13:47.373 回答