二维int数组不接受我提供的维度

时间:2013-10-14 13:00:51

标签: java arrays

这是我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类中为yRangeGridGenerator分配值,则似乎没有问题。当我在MapperMain类中使用构造函数时,我收到此错误。

3 个答案:

答案 0 :(得分:5)

这一行

grid = new int[yRange][xRange];

应该在构造函数中,因为在您的代码示例中,grid从未使用yRangexRange的正确值进行初始化。

所以 - 你的课应该是这样的:

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]; 

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