Метод Javascript Huffman Decoder / Translate работал раньше, но теперь вызывает исключение NullPointerException - PullRequest
0 голосов
/ 18 марта 2019

Я работал над программой HuffmanCode и думал, что закончил ее сегодня утром. Тем не менее, я случайно начал получать NullPointerException, хотя сегодня он прекрасно работал. Ниже приведен метод, который вызывает проблемы: (порт = левая сторона дерева, звезда = правая сторона дерева)

public void translate(BitInputStream input, PrintStream output) {
  HuffmanNode tempRootRef = huffmanRootRef;
  while(input.hasNextBit() || (tempRootRef.port == null && tempRootRef.star == null)) {
     if(tempRootRef.port == null && tempRootRef.star == null) {
        output.write(tempRootRef.charValue);
        tempRootRef = huffmanRootRef;
     } else if (input.nextBit() == 0){
        tempRootRef = tempRootRef.port;
     } else {
        tempRootRef = tempRootRef.star;
     }
  }
}

Я получаю NullPointerException в первом операторе if:

Exception in thread "main" java.lang.NullPointerException
at HuffmanCode.translate(HuffmanCode.java:118)
at HuffmanCompressor.decompress(HuffmanCompressor.java:115)
at HuffmanCompressor.main(HuffmanCompressor.java:178)

Я пытался просмотреть ответы на похожие вопросы, но мне было трудно их понять.

1 Ответ

0 голосов
/ 18 марта 2019

Если предположить, что huffmanRootRef имеет ненулевое значение, тогда NPE в этой строке означает, что input.hasNextBit() вернул true, но tmpRootRef равно null.

Я предлагаю провести трассировку через ваш код(либо в отладчике, либо с помощью нескольких операторов печати), чтобы наблюдать за значениями во время его выполнения.

...