我怀疑makeLine方法以某种方式创建了一个null数组,但我不太确定。
任何帮助将不胜感激!我的代码片段如下:
public void all() {
int[][] line = new int[3][];
for (int i = 0; i < 3; i++) {
if (i > 0 && line[i - 1][0] == 2) { // Error occurs at this line
int start = line[i - 1][2];
int pos = line[i - 1][1];
int xy = line[i - 1][3]++;
if (line[i - 1][3] == 1) {
int end = y()[1];
line[i] = new int[]{1, start, end, pos, xy};
} else {
int end = x()[1];
line[i] = new int[]{1, start, end, pos, xy};
}
} else {
line[i] = makeLine();
}
}
}
private int[] makeLine() {
Random r = new Random();
int startX = x()[0];
int endX = x()[1];
int startY = y()[0];
int endY = y()[1];
int xy = r.nextInt(3 - 1) + 1;
if (xy == 1) {
return new int[]{1, startX, endX, startY, xy};
}
return new int[]{1, startY, endY, startX, xy};
}
private int[] x() {
DisplayMetrics displaymetrics = context.getResources().getDisplayMetrics();
int xLeft = (int) (13 * displaymetrics.density);
int xRight = (int) (displaymetrics.widthPixels - (13 * displaymetrics.density));
Random r = new Random();
int startX = r.nextInt(xRight - xLeft) + xLeft;
int endX = r.nextInt(xRight - xLeft) + xLeft;
return new int[]{startX, endX};
}
private int[] y() {
DisplayMetrics displaymetrics = context.getResources().getDisplayMetrics();
int yTop = (int) (60 * displaymetrics.density);
int yBottom = (int) (displaymetrics.heightPixels - (51 * displaymetrics.density));
Random r = new Random();
int startY = r.nextInt(yBottom - yTop) + yTop;
int endY = r.nextInt(yBottom - yTop) + yTop;
return new int[]{startY, endY};
}
答案 0 :(得分:1)
异常是因为你在初始化之前尝试访问了行[0] [0],那里什么都没有。
通过做:
int[][] line = new int[3][];
您只为此多维数组创建一个维度。这样做的方法是:
int[][] line = new int[3][SOME_NUMBER];
或显式初始化每一行:
int[][] line = new int[3][];
for (int i = 0; i < 3; i++) {
line[i] = new int[SOME_NUMBER];
}
如果您需要更好地理解它,请查看此处,例如:[Java中的多维数组
] 1
答案 1 :(得分:0)
我认为你得到一个空指针,因为你引用了一个超出数组边界的元素。您收到错误的行应如下所示:
if (i > 0 && line[i][0] == 2) {
而不是:
if (i > 0 && line[i - 1][0] == 2)
这个程序都有类似的错误。请记住,数组开始索引为0而不是1。