2013-10-12 4 views
0

Я пытаюсь создать статический массив, который я инициализировать позже в методепроблемы со статическими 1d массивов в 2D массивов

Что-то вроде этого

static Object[][] table; 
static Object[] codeZero; 
static Object[] codeOne; 

Я называю этот метод из основного

static void init(){ 
    table = new Object[][]{codeZero,codeOne}; 
} 

, а затем другим способом я попробую что-то вроде этого

codeZero=new Object[2]; 
codeOne=new Object[2]; 
table[0][0]= new Integer(4); 

, когда я пытаюсь напечатать таблицу [0] [0] это дает мне исключение нулевого указателя

+0

Вы можете указать код, который вы используете, чтобы распечатать? –

+1

@DavidWallace, похоже, проблема заключается в том, что OP создает экземпляр массива, используя значения по умолчанию 'null' переменных' codeZero' и 'codeOne', затем переназначьте эти поля, но переменная' table' (или 'hashTable') по-прежнему заполняется '{null, null}'. –

+0

извините за мою ошибку .. я ее отредактировал – sohil

ответ

3

Это то, что hapenning

  1. Инстанцирование table переменному с null элементами:

    table = new Object[][] { codeZero, codeOne }; 
    
  2. Измените ссылки codeZero и codeOne переменных, старые ссылки все равно остаются в table, они не будут заменены.

    codeZero = new Object[2]; 
    codeOne = new Object[2]; 
    
  3. Поскольку старые null ссылки все еще находятся в table, вы получите NullPointerException при вызове table[0][<whatever>].

Возможные исправления: Инициализировать codeZero и codeOne перед инициализацией table. Затем, инициализировать table, используя ваш текущий подход:

codeZero = new Object[2]; 
    codeOne = new Object[2]; 
    table = new Object[][] { codeZero, codeOne } 
+0

имеет смысл ... спасибо !! – sohil

+0

поэтому, когда я печатаю кодZero [0] в моем основном методе, он должен дать мне право объекта с момента его инициализации? – sohil

+0

@sohil да, это будет. –

Смежные вопросы