2013-11-20 4 views
0

Ниже приведена часть моего кода.Что может быть причиной этого исключения NullPointer?

Я получаю исключение NullPointerException в строке «buckets [i] [h.hashBands (sum, bandRows)]. Add (j);».

В чем может быть причина? Функция

public static void generateBuckets() 
{ 
    hash h = new hash(); 
    buckets = new ArrayList[bands][bandRows]; 

    for(int i=0; i<bands; i++) 
    { 
     for(int j=0; j<preprocessedList.size(); j++) 
     { 
      int[] sum = new int[bandRows]; 
      int a=0; 
      for(int k=i; k<bands; k++) 
      { 
       sum [a] = sigMatrix[k][j]; 
       a++; 
      } 
      buckets[i][h.hashBands(sum, bandRows)].add(j); 
     } 
    } 

В h.hashBands() выглядит следующим образом

public int hashBands(int[] in, int bucketSize) 
    {   
     BigInteger hashVal = BigInteger.ZERO; 
     int k = in.length; 
     BigInteger base = BigInteger.valueOf(3); 
     BigInteger size = BigInteger.valueOf(bucketSize); 

     for (int i = 0; i < in.length; i++) 
      hashVal = (hashVal.add(BigInteger.valueOf(in[i]).multiply(base.pow(k-i-1)))); 

     hashVal = hashVal.mod(size); 
     return hashVal.intValue(); 
    } 
+0

'buckets [i] [h.hashBands (sum, bandRows)]' возможно null? Как вы инициализируете этот массив? –

+0

Я инициализировал его как buckets = new ArrayList [диапазоны] [bandRows]; – zim

ответ

2

Вы создаете 2D массив ArrayLists

buckets = new ArrayList[bands][bandRows]; 

, но никогда не заполняя его ArrayLists так что каждый элемент является нулевым. Когда вы вызываете .add(), вы получаете NullPointerExcepion

+0

Получил это. Благодаря :) – zim

1

Вы никогда не инициализировать buckets[][].
Прежде чем использовать его, вам нужно добавить buckets = new BucketType[xlength][ylength];.

+0

Нет, это уже инициализировано в моем классе как buckets = new ArrayList [диапазоны] [bandRows]; – zim

+0

Да, это не поможет. Вы должны инициализировать фактическую запись в ней, которую используете. –

0

Вы не инициализировали эту конкретную запись в массиве buckets ни для чего.

0

очень сложно сказать наверняка. либо вы не инициализировали ведра, либо элементы в нем, ... в любом случае, ответ на это наверняка довольно невозможно. было бы легче, если бы мы увидели немного больше кода и, может быть, stacktrace.

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