在java中添加到二维列表的问题

时间:2016-01-11 20:37:43

标签: java arrays list multidimensional-array

我不明白为什么这不起作用,如果有人能提供帮助那就太好了;

for(int i = 0; i < 10 ; i++){
    lines = fileL[i];
    for(int j = 0; j < lines.length(); j++){
        enemySpawningL[i][j] = fileL[i].substring(j*2, 1);
    }
}

其中enemySpawning [] []已被设置为字符串,fileL被设置为此;

private String[] fileL = {
    "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1",
    "1 0 0 0 0 1 0 0 0 0 1 0 0 2 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 2 0 0 1 0 0 0 0 1 0 0 0 0 1",
    "1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1",
    "1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1",
    "1 0 0 0 0 1 0 0 2 0 1 0 0 0 0 1 0 2 0 0 1 0 0 0 0 1 0 0 2 0 1 0 0 0 0 1 0 2 0 0 1 0 0 0 0 1 0 2",
    "1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 0 0 1",
    "1 0 3 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 0 0 1 0 2 0 1 0 3 0 1",
    "1 0 0 0 2 0 0 0 1 0 0 0 3 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 3 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 3 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 1",
    "2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3 0 2 0 0 3",
    "2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2",
};

(我尝试使用文本文件,但我认为没有意义,因为它不太重要)

编辑:我只是想让敌人的行列表成为[行号] [行号]

EDIT2:我得到的错误是java.lang.NullPointerException

2 个答案:

答案 0 :(得分:0)

错误可能是因为您没有初始化enemySpawningL

String[][] enemySpawningL = new String[rowsNum][columnsNum];

如果我理解你正在尝试做什么,请将代码更改为

for(int i = 0 ; i < 10 ; ++i) {
    String[] digits = fileL[i].split(" ");
    for(int j = 0 ; j < digits.length ; ++j) {
        enemySpawningL[i][j] = digits[j];
    }
}

这将在每个单元格中为您提供一位数字。目前你的substring()是错误的,因为起点大于j&gt;的终点。 0如果您更改顺序,则每次都插入带有多个数字的字符串。

"1"
"1 0"
"1 0 0"
....

答案 1 :(得分:0)

问题是,正如@guy所提到的,没有初始化数组,但是这里还有另一个错误:

enemySpawningL[i][j] = fileL[i].substring(j*2, 1);

因为'j'可以具有fileL[i]长度的最大值,所以如果请求索引j * 2,则在循环的一半中它将超出约束。您也以不正确的方式使用substring方法。你希望循环看起来像是:

for(int j = 0; j < lines.length(); j += 2){
    enemySpawningL[i][j] = fileL[i].substring(j, j+1);
}

j变量现在每次迭代增加2(跳过空格),substring将从字符串j的位置file[L]返回一个字符。这就是你想要的。