NullPointerException при присваивании arr [x] [y] в многомерном массиве - PullRequest
1 голос
/ 05 июля 2011

Я знаю, почему произошла ошибка, и я исправил ее. Мне нужен кто-то, чтобы объяснить это правильно. Компилируется нормально, но в runTime он показывает исключение нулевого указателя в строке appString [i] [j] = s [j]; .. Кто-то знает причину ...?

appString = new String[app.size()][];
for(int i = 0; i<app.size();i++)
{
    Vector appVec = (Vector) app.get(i);
    String[] s = new String[appVec.size()];
    appVec.toArray(s);
    for(int j = 0 ; j<s.length;j++)
    {
        //String s1 = s[j];
        appString[i][j] = s[j];
    }
}

Ответы [ 3 ]

7 голосов
/ 05 июля 2011

Вы создали массив верхнего уровня , но каждый его элемент имеет значение null. Вам нужно что-то вроде:

appString[i] = new String[s.length];

внутри вашей петли. Или, если вам все равно не нужен массив, вам не нужно выполнять цикл:

appString = new String[app.size()][];
for(int i = 0; i<app.size();i++)
{
    Vector appVec = (Vector) app.get(i);
    String[] s = new String[appVec.size()];
    appVec.toArray(s);
    appString[i] = s;
}
1 голос
/ 05 июля 2011

Как и решение @ Jon, но немного короче.

Vector<Vector<String>> app = ...
List<String[]> arrays = new ArrayList<String[]>();
for(Vector<String> vector: app) 
   arrays.add(vector.toArray(new String[vector.size()]));
appString = arrays.toArray(new String[arrays.size()][]);
0 голосов
/ 05 июля 2011

Следующий оператор создаст массив String с размером приложения для 1-го измерения

appString = new String[app.size()][];

Но все значения для этого двухмерного массива будут заполнены нулем.

Когда appString[i][j]обрабатывается во время выполнения, будет искать первое appString[i] ведро и в этом appString [i] [j] будет искать.

Здесь appString[i] само по себе равно null и, следовательно, у вас есть NullPointerException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...